【问题标题】:Unix dateTime format not properly converted in swift 5 [duplicate]Unix dateTime 格式未在 swift 5 中正确转换 [重复]
【发布时间】:2019-10-03 12:01:49
【问题描述】:

使用 alamofire 可以快速获取 JSON 数据。 时间值是整数,采用 iso8601 格式。当我从后端转换整数格式的 Unix 日期时间时,它给了我奇怪的价值。

1570088096210 必须转换为GMT: Thursday, October 3, 2019 7:34:56.210 AM 但给我51724-02-10T10:16:00+00:00

代码:

 let dateValue = Double(AppData.time ?? 0)
 let dateFinal = Date(timeIntervalSince1970: dateValue).formattedISO8601

【问题讨论】:

标签: ios swift datetime unix swift5


【解决方案1】:

好像你得到了milliseconds,你需要在创建date之前转换为seconds

let time: TimeInterval = 1570088096210/1000
let dateFinal = Date(timeIntervalSince1970: time)
print(dateFinal.description)

2019-10-03 07:34:56 +0000

【讨论】:

    【解决方案2】:

    我们鼓励您使用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)
    }
    

    【讨论】:

    • 无法转换模型结构数据类型。在后端,它具有整数数据类型。
    • 查看文字 JSON。日期类型整数。您可以使用相同的策略将其编码回整数。 Codable 非常灵活。
    【解决方案3】:

    1570088096210实际上是02/10/51724 @ 10:16pm (UTC)

    请检查您的收入数据

    【讨论】:

      猜你喜欢
      • 2017-10-01
      • 2014-10-26
      • 2014-02-04
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多