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。即使深入研究接口文件,似乎也没有更多的亮点。
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。即使深入研究接口文件,似乎也没有更多的亮点。