繁体   English   中英

DateFormatter ISO8601时区

[英]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时,应使用ZDateFormatter一起使用的许多时区日期格式符号也特别导致Z如果日期的时区偏移量为0。

如果要从Date生成一个字符串,并且要确保获取+00:00而不是Z ,请使用DateFormatter和适当的日期格式符说明符。

格式说明符xxx将为您提供+00:00格式的时区。 XXXZZZZZ也将为您提供相同的格式,但是如果偏移量为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM