如何在 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"
我想使用 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"