8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

如何在 Swift 中使用 Codable 转换带有可选秒小数部分的日期字符串?

JW. 1月前

126 0

我正在用 Swift 的 Codable 替换旧的 JSON 解析代码,遇到了一点麻烦。我想这与其说是 Codable 问题,不如说是 DateFormatter 问题。从结构开始

我正在用 Swift 的 Codable 替换旧的 JSON 解析代码,但遇到了一些问题。我想这与其说是 Codable 的问题,不如说是 DateFormatter 的问题。

从结构体开始

 struct JustADate: Codable {
    var date: Date
 }

和一个 json 字符串

let json = """
  { "date": "2017-06-19T18:43:19Z" }
"""

现在让我们解码

let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601

let data = json.data(using: .utf8)!
let justADate = try! decoder.decode(JustADate.self, from: data) //all good

但是如果我们将日期更改为具有秒的小数部分,例如:

let json = """
  { "date": "2017-06-19T18:43:19.532Z" }
"""

现在它坏了。日期有时会返回小数秒,有时则不会。我以前解决这个问题的方法是在我的映射代码中,我有一个转换函数,它尝试了带小数秒和不带小数秒的 dateFormats。不过,我不太确定如何使用 Codable 来解决这个问题。有什么建议吗?

帖子版权声明 1、本帖标题:如何在 Swift 中使用 Codable 转换带有可选秒小数部分的日期字符串?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由JW.在本站《date》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 你为什么要浪费时间在这上面?kkkk 自定义实现更简洁,而且会抛出 DecodingError。顺便说一句,我原来的答案适用于 iOS10,不需要 ISO8601DateFormatter

返回
作者最近主题: