如何在 32 位上将 unix millis 转换为 NSDate iPhone

How to convert unix millis to NSDate on 32 bit iPhone

我想使用 Swift 将 UNIX millis(从服务器返回)转换为 NSDate。这是返回的数据:

{
    timestamp: 1469263452058
}

它在 iPhone 5S 及更高版本上完美运行。但是它在 iPhone 5 上失败了,因为它是 32 位的。 我还尝试将值转换为 Int64,但它崩溃了。

请不要对 1469263452058 进行硬编码。我需要先将时间戳存储到变量中,然后才能将其转换为 NSTimeInterval。

你必须将时间戳除以 1000

例如:

Swift 2

let result = try! NSJSONSerialization.JSONObjectWithData(jsonFromServer, options: [])

if let timestamp = result["timestamp"] as? Double {
    let timeInterval: NSTimeInterval  = timestamp/1000

    print("time interval is \(timeInterval)")
    //Convert to Date
    let date = NSDate(timeIntervalSince1970: timeInterval)

    //Date formatting
    let dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "dd, MMMM yyyy HH:mm:a"
    dateFormatter.timeZone = NSTimeZone(name: "UTC")
    let dateString = dateFormatter.stringFromDate(date)
    print("formatted date is =  \(dateString)")
}

Swift 4

let result = try! JSONSerialization.jsonObject(with: jsonFromServer as Data, options: [])

if let timestamp = result["timestamp"] as? Double {
    let timeInterval: TimeInterval  = timestamp/1000

    print("time interval is \(timeInterval)")
    //Convert to Date
    let date = NSDate(timeIntervalSince1970: timeInterval)

    //Date formatting
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "dd, MMMM yyyy HH:mm:a"
    dateFormatter.timeZone = NSTimeZone(name: "UTC")! as TimeZone
    let dateString = dateFormatter.string(from: date as Date)
    print("formatted date is =  \(dateString)")
}

输出:

time interval is 1469263452.058
formatted date is =  23, July 2016 08:44:AM

这应该有效。我在 Playground 试过了。

let timestamp: Double = 1469263452058/1000
let timeWithNSDate = NSDate.init(timeIntervalSince1970: timestamp)

输出:

"Jul 23, 2016, 2:14 PM"