使用DateFormatter解析Timestamp时的正确日期格式问题
解决ISO8601时间戳解析失败的问题
嗨,我来帮你搞定这个日期解析的小问题~你遇到的问题主要出在格式符号的匹配错误上,具体来说有两个核心问题:
1. 小时格式符号用错了
你写的k是12小时制的小时标识(范围是1-12),但你的时间戳里的06是24小时制的小时数,这就导致解析器无法识别这个时间。正确的24小时制小时符号应该是HH(范围00-23)。
2. 时区符号不匹配
时间戳末尾的Z代表UTC时区,你用的Z格式符号对应的是±HHmm这种偏移格式(比如+0800),根本匹配不上单独的Z。这里得换成X,它专门用来匹配ISO 8601标准的时区标识(包括Z、±HH:mm或者±HHmm)。
另外还有个关键细节:一定要给DateFormatter设置en_US_POSIX的locale,不然系统的区域设置可能会干扰ISO8601格式的解析,导致莫名其妙的失败。
修正后的完整代码
let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSX" dateFormatter.locale = Locale(identifier: "en_US_POSIX") let date = dateFormatter.date(from: "2018-03-06T06:28:39.887Z")
这样修改之后,应该就能成功解析你的时间戳啦~
内容的提问来源于stack exchange,提问作者DevWithZachary
相关产品推荐
相关产品推荐

