[英]DateFormatter ISO8601 TimeZones
我正在尝试添加解析验证测试,并想检查发送给我的初始JSON是否可以变成一个对象,并且该对象又变成JSON。 最后,验证将是两个字典相等。 但是,我看到的是,虽然日期解析有效,但转换为字符串时将+00:00
替换为Z
在我的研究中,我发现它们可以互换,并且我知道我可以在理论上用+00:00
代替Z
进行比较,但是我想知道ISO8601DateFormatter
或任何DateFormatter
上是否有办法说您比Z
更愿意+00:00
?
对于那些喜欢看一些代码的人,这是我的快速示例。
var date = "2018-01-30T22:13:12+00:00"
let df = ISO8601DateFormatter()
df.formatOptions = [.withInternetDateTime]
let newDate = df.date(from: date)
let newString = df.string(from: newDate!)
ISO 8601日期格式规定,当日期的时区偏移量为0时,应使用Z
与DateFormatter
一起使用的许多时区日期格式符号也特别导致Z
如果日期的时区偏移量为0。
如果要从Date
生成一个字符串,并且要确保获取+00:00
而不是Z
,请使用DateFormatter
和适当的日期格式符说明符。
格式说明符xxx
将为您提供+00:00
格式的时区。 XXX
和ZZZZZ
也将为您提供相同的格式,但是如果偏移量为0,则结果将为Z
有关更多信息,请参见Unicode技术规范#35页。
ISO8601DateFormatter
及其formatOptions
的文档指出ZZZZZ
用于时区。 因此,对于时区偏移量0,您将始终获得Z
一个DateFormatter
用的日期格式yyyy-MM-dd'T'HH:mm:ssxxx
会给你你正在寻找相同的结果。 但也请确保将日期格式程序的语言环境设置为en_US_POSIX
。 您还需要确保输出在UTC时区输出。 将格式程序的timeZone
属性设置为TimeZone(secondsFromGMT: 0)
timeZone
TimeZone(secondsFromGMT: 0)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.