首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DateFormatter ISO8601 TimeZones

DateFormatter ISO8601 TimeZones
EN

Stack Overflow用户
提问于 2018-03-14 20:50:48
回答 1查看 269关注 0票数 0

我试图添加解析验证测试,并希望检查我发送的初始JSON是否可以转换为对象,然后将该对象转换为JSON。最终验证的结果是,这两个字典是相等的。然而,我看到的是,虽然日期解析工作,但对字符串的转换将+00:00替换为Z。在我的研究中,我发现它们是可互换的,我知道理论上我可以用Z代替+00:00来进行比较,但我想知道ISO8601DateFormatterDateFormatter上是否有一种方法可以说您更喜欢+00:00而不是Z

对于那些喜欢看一些代码的人来说,这是我快速操场的例子。

代码语言:javascript
复制
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!)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-14 21:00:06

ISO 8601日期格式规定,当日期的时区偏移量为0时,应使用Z。如果日期的时区偏移量为0,与DateFormatter一起使用的许多时区日期格式符号也会特别导致Z

如果您希望从Date生成一个字符串,并且希望确保您得到的是+00:00而不是Z,那么使用DateFormatter和适当的日期格式化程序说明符。

格式说明符xxx将在格式+00:00中为您提供一个时区。XXXZZZZZ也会给出相同的格式,但如果偏移量为0,则会在结果中给出Z。有关这些信息的更多信息可以在Unicode技术规范#35页面上看到。

ISO8601DateFormatter及其formatOptions的文档声明ZZZZZ用于时区。因此,对于时区偏移量为0,您将始终获得Z

一个日期格式为DateFormatteryyyy-MM-dd'T'HH:mm:ssxxx将给您相同的结果,您正在寻找。但也要确保将日期格式化程序的区域设置为en_US_POSIX。您还需要确保输出在UTC时区中。将格式化程序的timeZone属性设置为TimeZone(secondsFromGMT: 0)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49287401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档