Swift 对 JSONEncoder 使用的默认日期格式是什么?

Gol*_*Joe 6 json ios swift codable jsonencoder

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)")
Run Code Online (Sandbox Code Playgroud)

这打印:

json:Optional("{\"date\":589331953.61679399}")
Run Code Online (Sandbox Code Playgroud)

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

Fir*_*iro 9

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 策略。

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