我试图添加解析验证测试,并希望检查我发送的初始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!)发布于 2018-03-14 21:00:06
ISO 8601日期格式规定,当日期的时区偏移量为0时,应使用Z。如果日期的时区偏移量为0,与DateFormatter一起使用的许多时区日期格式符号也会特别导致Z。
如果您希望从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)。
https://stackoverflow.com/questions/49287401
复制相似问题