Unix 日期时间格式未在 swift 5 中正确转换
Unix dateTime format not properly converted in swift 5
正在使用 alamofire 在 swift 中获取 JSON 数据。
时间值是整数并且有 iso8601 格式。当我从后端转换整数格式的 Unix 日期时间时,给我一个奇怪的值。
1570088096210
必须转换为 GMT: Thursday, October 3, 2019 7:34:56.210 AM
但给我 51724-02-10T10:16:00+00:00
Code:
let dateValue = Double(AppData.time ?? 0)
let dateFinal = Date(timeIntervalSince1970: dateValue).formattedISO8601
1570088096210
实际上是02/10/51724 @ 10:16pm (UTC)
请检查您的收入数据
似乎您正在获取 milliseconds
,您需要在创建 date
之前将其转换为 seconds
,
let time: TimeInterval = 1570088096210/1000
let dateFinal = Date(timeIntervalSince1970: time)
print(dateFinal.description)
2019-10-03 07:34:56 +0000
我们鼓励您使用 Decodable
来解析 JSON。它可以非常顺利地处理 millisecondsSince1970,包括转换为 Date
let json = """
{"date":1570088096210}
"""
struct PointInTime : Decodable {
let date : Date
}
do {
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .millisecondsSince1970
let result = try decoder.decode(PointInTime.self, from: Data(json.utf8))
print(result.date) // 2019-10-03 07:34:56 +0000
} catch {
print(error)
}
正在使用 alamofire 在 swift 中获取 JSON 数据。 时间值是整数并且有 iso8601 格式。当我从后端转换整数格式的 Unix 日期时间时,给我一个奇怪的值。
1570088096210
必须转换为 GMT: Thursday, October 3, 2019 7:34:56.210 AM
但给我 51724-02-10T10:16:00+00:00
Code:
let dateValue = Double(AppData.time ?? 0)
let dateFinal = Date(timeIntervalSince1970: dateValue).formattedISO8601
1570088096210
实际上是02/10/51724 @ 10:16pm (UTC)
请检查您的收入数据
似乎您正在获取 milliseconds
,您需要在创建 date
之前将其转换为 seconds
,
let time: TimeInterval = 1570088096210/1000
let dateFinal = Date(timeIntervalSince1970: time)
print(dateFinal.description)
2019-10-03 07:34:56 +0000
我们鼓励您使用 Decodable
来解析 JSON。它可以非常顺利地处理 millisecondsSince1970,包括转换为 Date
let json = """
{"date":1570088096210}
"""
struct PointInTime : Decodable {
let date : Date
}
do {
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .millisecondsSince1970
let result = try decoder.decode(PointInTime.self, from: Data(json.utf8))
print(result.date) // 2019-10-03 07:34:56 +0000
} catch {
print(error)
}