大佬教程收集整理的这篇文章主要介绍了使用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,请注明来意。