如何以这种日期格式使用 JSONDecoder / Codable?
Posted
技术标签:
【中文标题】如何以这种日期格式使用 JSONDecoder / Codable?【英文标题】:How can I use JSONDecoder / Codable with this date format? 【发布时间】:2019-03-23 17:15:51 【问题描述】:我从 API 得到以下日期。
"createdDate": "2019-03-22T15:53:06.663Z"
我想对此进行解码并将其存储为 Date
类型。
但我的JSONDecoder
无法解码。
我尝试用
来扩展它extension DateFormatter
static let iso8601Full: DateFormatter =
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
formatter.calendar = Calendar(identifier: .iso8601)
formatter.timeZone = TimeZone(secondsFromGMT: 0)
formatter.locale = Locale(identifier: "en_US_POSIX")
return formatter
()
然后使用decoder.dateDecodingStrategy = .formatted(DateFormatter.iso8601Full)
但这不起作用
【问题讨论】:
你得到了什么输出? 什么不起作用?实际上JSONDecoder
对于具有一个键值对的字典来说有点矫枉过正。
我只包括相关的道具,还有很多。
日期格式化程序对于给定的 ISO8601 字符串是正确的。
【参考方案1】:
将ISO8601DateFormatter
与格式选项一起使用
let str = "2019-03-22T15:53:06.663Z"
let formatter = ISO8601DateFormatter()
formatter.formatOptions = [.withFullDate, .withFullTime, .withTimeZone, .withFractionalSeconds]
let date = formatter.date(from: str)
【讨论】:
或简单地[.withInternetDateTime, .withFractionalSeconds]
。顺便说一句,您不能将 ISO8601DateFormatter 与dateDecodingStrategy
一起使用。您需要创建自定义日期解码策略。 ***.com/questions/28016578/…以上是关于如何以这种日期格式使用 JSONDecoder / Codable?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 jsonDecoder 处理来自 JSON 响应的动态键?