2
struct TestEnc: Codable {
    var date = Date()
}
let encoder = JSONEncoder()
let tenc = TestEnc()
let jsonData = try encoder.encode(tenc)
let json = String(data: jsonData, encoding: String.Encoding.utf8)
print("json:\(json)")

这打印:

json:Optional("{\"date\":589331953.61679399}")

我在文档中找不到这应该代表什么。

4

1 回答 1

6

iOS 日期通常被编码或处理为秒ReferenceDate

例如 Date(timeIntervalSinceReferenceDate:)

这方面的文档是:

概括

创建一个相对于 2001 年 1 月 1 日 00:00:00 UTC 以给定秒数初始化的日期值。

可以通过这个运行你的号码,你会得到你的日期:

Date(timeIntervalSinceReferenceDate: 589331953.61679399)

输出:“2019-09-04 23:19:13 +0000\n”


就显式编码文档而言。这很简洁。

文档中提到了默认编码策略:

默认策略是 JSONEncoder.DateEncodingStrategy.deferredToDate 策略。

但是,这实际上意味着什么似乎并不清楚(除了手动测试),目前参考在这里。即使深入研究接口文件,似乎也没有任何亮点。

于 2019-09-05T22:33:22.687 回答