我试图添加解析验证测试,并希望检查我发送的初始JSON是否可以转换为对象,然后该对象又转换为JSON。最后验证是两个词典都是平等的。然而,我所看到的是,虽然日期解析有效,但转换为字符串会将+00:00
替换为Z
。在我的研究中,我发现这些是可以互换的,我知道理论上可以用Z
代替+00:00
进行比较,但我想知道是否有办法ISO8601DateFormatter
或任何DateFormatter
表示您希望+00:00
超过Z
?
对于那些喜欢看一些代码的人来说,这是我的快速游乐场示例。
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!)
答案 0 :(得分:0)
ISO 8601日期格式规定,当日期的时区偏移量为0时,应使用<outputFormat>markdown</outputFormat>
许多与Z
一起使用的时区日期格式符号也会导致DateFormatter
如果日期的时区偏移量为0。
如果您想从Z
生成字符串,并且希望确保获得Date
而不是+00:00
,请使用Z
和相应的日期格式化程序说明符。
格式说明符DateFormatter
会以xxx
格式为您提供时区。 +00:00
和XXX
也会为您提供相同的格式,但如果偏移量为0,则会在结果中显示ZZZZZ
。有关这些内容的更多信息,请参阅Unicode Technical Specification #35页面
Z
及其ISO8601DateFormatter
状态的文档formatOptions
用于时区。因此,对于时区偏移量为0,您将始终获得ZZZZZ
。
日期格式为Z
的{{1}}会为您提供所需的相同结果。但也要确保将日期格式化程序的语言环境设置为DateFormatter
。您还需要确保输出在UTC时区中出现。将格式化程序的yyyy-MM-dd'T'HH:mm:ssxxx
属性设置为en_US_POSIX
。