-3

我在 JSON 中有这个日期:2021-07-31T00:00:00+02:00非常标准。

我的 Postgre SQL 将日期存储为秒,例如646869600.

我应该如何设置解码器?

let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .deferredToDate
let o7 = try! decoder.decode(Organization.self, from: o6)

我试过这三个:.deferredToDate,,,.iso8601.secondsSince1970都引发了相同的错误:

预期解码 Double 但找到了一个字符串/数据。

怎么了?

4

2 回答 2

1

这是标准的 ISO8601 日期格式。日期解码策略.iso8601可以对其进行解码。

let jsonString = """
{"date":"2021-07-31T00:00:00+02:00"}
"""

struct Organization : Decodable {
    let date : Date
}

let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
let o7 = try! decoder.decode(Organization.self, from: Data(jsonString.utf8))

print(o7.date) // 2021-07-30 22:00:00 +0000

Int格式似乎是“自参考日期以来的秒数”(1.1.2001 )

let seconds = o7.date.timeIntervalSinceReferenceDate
于 2021-07-24T15:23:05.663 回答
0

问题不在于日期格式。您甚至可以使用自定义dateFormatter有关更多信息,请参见此处),然后将其分配给解码器:

let jsonDecoder = JSONDecoder()
jsonDecoder.dateDecodingStrategy = .formatted(customFormatter)

但!

它会返回你 aDate并且看起来你在结构中使用Double( or TimeInterval) Organization。尝试将类型更改为,然后如果您需要以秒为单位的时间,Date您可以获得。timeInterval

于 2021-07-24T15:14:10.063 回答