快速UTC时区不是UTC

问题描述 投票:1回答:3

我对Swift类型的TimeZone有疑问。我需要获得一个UTC0时区来格式化我的Date对象。我正在创建这样的TimeZone对象。

let utcTimeZone = TimeZone(abbreviation: "UTC")

但是创建后,该对象为我提供了GMT0时区。这有可能在Swift中获得UTC0时区吗?操场上的GMT (fixed)GMT (GMT) offset 0有什么区别?

Xcode 10.3游乐场enter image description here

swift xcode timezone utc gmt
3个回答
1
投票

根据Google,我去过那里

世界标准时间与格林威治标准时间之间没有时差

换句话说,格林尼治标准时间(基本上)是UTC,所以您已经拥有它!

[offset 0指的是与UTC / GMT的时区偏移量,它是0,如果在EST中,则可能是240,具体取决于分钟,小时,毫秒等。

fixed在您的第二行表示它是格林尼治标准时间,并且偏移量数据可能是不可变的。我不知道没有操场开放,但我会在实例化后尝试更改时区,并查看分配后是否可以更改偏移量。


1
投票

[从技术上讲,UTC和GMT之间有really subtle differences(GMT可能表示UT1),但是API的设计人员认为它们实际上是相同的(因此,它们是相同的,所以他们做到了:

TimeZone(identifier: "UTC") == TimeZone(identifier: "GMT")

它们都代表恒定偏移量为0的时区。

如果只想在输出文本中显示字母“ UTC”,请使用DateFormatter

let formatter = DateFormatter()
formatter.timeZone = TimeZone(identifier: "UTC")
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss 'UTC'"
print(formatter.string(from: Date()))

或者更好的是,使用ISO8601DateFormatter,它将Z添加到日期的末尾以指示日期时间采用UTC:

let formatter = ISO8601DateFormatter()
formatter.timeZone = TimeZone(identifier: "UTC")
print(formatter.string(from: Date()))

此外,操场上的GMT(固定)和GMT(GMT)偏移量0有什么区别?

前者来自Swift TimeZone类,后者来自Objective-C NSTimeZone类。一个是另一个的桥接版本。从docsNSTimeZone

当您需要参考语义或其他基金会特定的行为时,请使用NSTimeZone


0
投票

在我的情况下,UTC表示UTC + 0,与GMT确实相同。我发现这篇文章真的很有用。https://www.timeanddate.com/time/gmt-utc-time.html谢谢大家的帮助。

© www.soinside.com 2019 - 2024. All rights reserved.