程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用swift4的iso8601日期json解码大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决使用swift4的iso8601日期json解码?

开发过程中遇到使用swift4的iso8601日期json解码的问题如何解决?下面主要结合日常开发的经验,给出你关于使用swift4的iso8601日期json解码的解决方法建议,希望对你解决使用swift4的iso8601日期json解码有所启发或帮助;

您可以这样使用:

enum DateError: String, Error {
    case invalIDDate
}

let decoder = JsONDecoder()

let formatter = DateFormatter()
formatter.calendar = Calendar(IDentifIEr: .iso8601)
formatter.locale = Locale(IDentifIEr: "en_US_POSIX")
formatter.timeZone = TimeZone(secondsFromGMT: 0)

decoder.dateDeCodingStrategy = .custom({ (decoder) -> Date in
    let container = try decoder.singleValueContainer()
    let dateStr = try container.decode(String.self)

    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
    if let date = formatter.date(from: dateStr) {
        return date
    }
    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXXXX"
    if let date = formatter.date(from: dateStr) {
        return date
    }
    throw DateError.invalIDDate
})

解决方法

所以,我的json中有iso8601日期,看起来像“ 2016-06-07T17:20:00.000 + 02:00”

有没有办法使用swift4解析这些iso8601日期?我缺少明显的东西吗?

我尝试了以下操作,但是仅jsonShipA中的dateString“ 2016-06-07T17:20:00Z”是可解析的&Hellip;。

import Foundation

struct Spaceship : Codable {
    var name: String
    var createdAt: Date
}

let jsonShipA = """
{
    "name": "Skyhopper","createdAt": "2016-06-07T17:20:00Z"
}
"""

let jsonShipB = """
{
    "name": "Skyhopper","createdAt": "2016-06-07T17:20:00.000+02:00"
}
"""

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

let dataA = jsonShipA.data(using: .utf8)!
if let decodedShip = try? decoder.decode(Spaceship.self,from: dataA) {
    print("jsonShipA date = \(decodedShip.createdAt)")
} else {
    print("Failed to decode iso8601 date format from jsonShipA")
}

let dataB = jsonShipB.data(using: .utf8)!
if let decodedShip = try? decoder.decode(Spaceship.self,from: dataB) {
    print("jsonShipA date = \(decodedShip.createdAt)")
} else {
    print("Failed to decode iso8601 date format from jsonShipB")
}

游乐场的输出为:

jsonShipA date = 2016-06-07 17:20:00 +0000
Failed to decode iso8601 date format from jsonShipB

引发的错误是“预期日期字符串为ISO8601格式”。但是据我所知,日期“ 2016-06-07T17:20:00.000 +
02:00”是有效的ISO8601日期

大佬总结

以上是大佬教程为你收集整理的使用swift4的iso8601日期json解码全部内容,希望文章能够帮你解决使用swift4的iso8601日期json解码所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: