我有一个关于Swift类型TimeZone的问题。我需要一个UTC0时区来格式化我的Date对象。我正在创建这样的TimeZone对象。
let utcTimeZone = TimeZone(abbreviation: "UTC")
但是在创建时,这个对象提供了GMT0时区。在Swift中可以获取UTC0时区吗?另外,在游乐场上GMT (fixed)和GMT (GMT) offset 0有什么不同?
Xcode 10.3游乐场

发布于 2019-10-09 23:29:53
从技术上讲,协调世界时和格林尼治标准时间之间存在 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,以指示日期时间采用协调世界时:
let formatter = ISO8601DateFormatter()
formatter.timeZone = TimeZone(identifier: "UTC")
print(formatter.string(from: Date()))还有,在操场上格林尼治标准时间(固定)和格林尼治标准时间(格林尼治标准时间)偏移0之间的区别是什么?
前者来自Swift TimeZone类,后者来自Objective-C NSTimeZone类。一种是另一种的桥接版本。来自NSTimeZone的docs,
当您需要引用语义或其他特定于基础的行为时,请使用
NSTimeZone。
发布于 2019-10-09 23:37:54
根据谷歌的说法,我曾经去过那里
协调世界时和格林尼治标准时间之间没有时差
换句话说,GMT (基本上)是UTC,所以你已经有了它!
offset 0指的是协调世界时/格林尼治标准时间的时区偏移量,它是0,如果你在美国东部时间,它可能是240左右(取决于它是分钟,小时,毫秒等)。
第二行上的fixed表示它是GMT,而偏移数据可能是不可变的。如果游乐场没有开放,我不会知道,但我会在实例化后尝试更改时区,看看分配后是否可以更改偏移量。
发布于 2021-01-28 14:47:17
您可以使用此选项来代替UTC,在某些设备中仅设置UTC不工作
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
let date = dateFormatter.date(from: "2020-01-23T11:55:00.000Z")https://stackoverflow.com/questions/58307194
复制相似问题