日期字符串与格式化程序预期的格式不匹配
Date string does not match format expected by formatter
只能在朋友的设备上重现此问题。设备来自德国,在设置中设置为德国地区。我无法在任何加拿大设备上复制。为什么尝试从 JSON 创建日期 属性 时失败?
控制台:
dataCorrupted(Swift.DecodingError.Context(codingPath: [_JSONKey(stringValue: "60", intValue: nil), CodingKeys(stringValue: "expiration", intValue: nil)], debugDescription: "Date string does not match format expected by formatter.", underlyingError: nil))
结构:
struct TokenResponse: Decodable {
var ticket : String
var expiration : Date?
var sessionId: String
}
URLSession 内部:
do {
let decoder = JSONDecoder()
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
decoder.dateDecodingStrategy = .formatted(formatter)
let json = try decoder.decode([String: TokenResponse].self, from: data)
}
catch {
print(error)
}
JSON:
{
"60":{
"ticket":"aVeryLongJWT",
"expiration":"2022-02-04T22:00:34.8325102Z",
"sessionId":"aUUID"
}
}
您应该在设置 dateFormat
之前设置 locale
字符串:
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
请参阅 DateFormatter
documentation 中的“使用固定格式日期表示法”。
只能在朋友的设备上重现此问题。设备来自德国,在设置中设置为德国地区。我无法在任何加拿大设备上复制。为什么尝试从 JSON 创建日期 属性 时失败?
控制台:
dataCorrupted(Swift.DecodingError.Context(codingPath: [_JSONKey(stringValue: "60", intValue: nil), CodingKeys(stringValue: "expiration", intValue: nil)], debugDescription: "Date string does not match format expected by formatter.", underlyingError: nil))
结构:
struct TokenResponse: Decodable {
var ticket : String
var expiration : Date?
var sessionId: String
}
URLSession 内部:
do {
let decoder = JSONDecoder()
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
decoder.dateDecodingStrategy = .formatted(formatter)
let json = try decoder.decode([String: TokenResponse].self, from: data)
}
catch {
print(error)
}
JSON:
{
"60":{
"ticket":"aVeryLongJWT",
"expiration":"2022-02-04T22:00:34.8325102Z",
"sessionId":"aUUID"
}
}
您应该在设置 dateFormat
之前设置 locale
字符串:
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
请参阅 DateFormatter
documentation 中的“使用固定格式日期表示法”。