我对Swift类型的TimeZone有疑问。我需要获得一个UTC0时区来格式化我的Date对象。我正在创建这样的TimeZone对象。
let utcTimeZone = TimeZone(abbreviation: "UTC")
但是创建后,该对象为我提供了GMT0时区。这有可能在Swift中获得UTC0时区吗?操场上的GMT (fixed)
和GMT (GMT) offset 0
有什么区别?
根据Google,我去过那里
世界标准时间与格林威治标准时间之间没有时差
换句话说,格林尼治标准时间(基本上)是UTC,所以您已经拥有它!
[offset 0
指的是与UTC / GMT的时区偏移量,它是0,如果在EST中,则可能是240,具体取决于分钟,小时,毫秒等。
fixed
在您的第二行表示它是格林尼治标准时间,并且偏移量数据可能是不可变的。我不知道没有操场开放,但我会在实例化后尝试更改时区,并查看分配后是否可以更改偏移量。
[从技术上讲,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
类。一个是另一个的桥接版本。从docs的NSTimeZone
,
当您需要参考语义或其他基金会特定的行为时,请使用
NSTimeZone
。
在我的情况下,UTC表示UTC + 0,与GMT确实相同。我发现这篇文章真的很有用。https://www.timeanddate.com/time/gmt-utc-time.html谢谢大家的帮助。