相关疑难解决方法(0)

如何使用Swift4中的Codable转换带有可选小数秒的日期字符串

我正在用Swift的Codable替换旧的JSON解析代码,并且遇到了一些麻烦.我想这不是一个可编码的问题,因为它是一个DateFormatter问题.

从结构开始

 struct JustADate: Codable {
    var date: Date
 }
Run Code Online (Sandbox Code Playgroud)

和一个json字符串

let json = """
  { "date": "2017-06-19T18:43:19Z" }
"""
Run Code Online (Sandbox Code Playgroud)

现在让我们解码

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

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

但是,如果我们更改日期以使其具有小数秒,例如:

let json = """
  { "date": "2017-06-19T18:43:19.532Z" }
"""
Run Code Online (Sandbox Code Playgroud)

现在它打破了.日期有时会以小秒数回归,有时则不会.我以前解决它的方式是在我的映射代码中我有一个转换函数,它尝试使用和不使用小数秒的dateFormats.我不太确定如何使用Codable来处理它.有什么建议?

nsdateformatter swift dateformatter swift4 codable

30
推荐指数
2
解决办法
6430
查看次数

从 Swift 中的 String 或 TimeInterval 解码日期/时间

我有一个需要解析的 JSON(来自第三方)。此 JSON 返回几个嵌套对象

articles: {
  authors: {
    birthday: 'DD-MM-YYYY'
  }
  relevant_until: 'YYYY-MM-DD HH:MM:SS'
  publication_date: secondsSince1970,
  last_comment: iso8601
}
Run Code Online (Sandbox Code Playgroud)

我遵循这个答案来拥有多个日期格式化程序,只要从 JSON 中提取的每个日期都是一个字符串,它就可以工作。

但是当涉及到secondsSince1970(UNIX 纪元时间)时,我找不到将其解析为可编码对象的方法。我到处都看到Date(timeIntervalSince1970: timestamp),但在解码时不知道如何使用它

当日期可以作为 TimeInterval 或字符串传递时,如何解析此对象上的日期?

try jsonDecoder.decode(Articles.self, from: jsonData)
Run Code Online (Sandbox Code Playgroud)

json swift

3
推荐指数
1
解决办法
1318
查看次数

标签 统计

swift ×2

codable ×1

dateformatter ×1

json ×1

nsdateformatter ×1

swift4 ×1