【问题标题】:How can I use JSONDecoder / Codable with this date format?如何以这种日期格式使用 JSONDecoder / Codable?
【发布时间】: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 字符串是正确的。

标签: ios swift nsdateformatter codable jsondecoder


【解决方案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 一起使用。您需要创建自定义日期解码策略。 stackoverflow.com/questions/28016578/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
  • 1970-01-01
  • 2018-09-18
相关资源
最近更新 更多