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

What is the default date format Swift uses for 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)")

这会打印:

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

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

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

的秒数

例如 Date(timeIntervalSinceReferenceDate:)

这方面的文档是:

Summary

Creates a date value initialized relative to 00:00:00 UTC on 1 January 2001 by a given number of seconds.

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

Date(timeIntervalSinceReferenceDate: 589331953.61679399)

output: "2019-09-04 23:19:13 +0000\n"


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

documentation中有提到默认编码策略的说法:

The default strategy is the JSONEncoder.DateEncodingStrategy.deferredToDate strategy.

但是,这实际上意味着什么(除了手动测试之外)似乎并没有任何明确说明,目前参考 here。即使深入研究接口文件,似乎也没有更多的亮点。