将时间戳转换为NSDate

时间:2016-10-31 02:59:29

标签: ios swift timestamp nsdate

我从JSON获得double值时间戳1477933200000.0,我想转换为NSDate然后转换为string。这就是我做的,

let dateNow = NSDate(timeIntervalSinceNow: timestampDouble)
let date1970 = NSDate(timeIntervalSince1970: timestampDouble)
let dateRef = NSDate(timeIntervalSinceReferenceDate: timestampDouble)

let dateFormatter = NSDateFormatter()
// dateFormatter.dateFormat = "MM/dd/YYYY HH:MM:ss a"
dateFormatter.dateStyle = NSDateFormatterStyle.LongStyle
dateFormatter.timeStyle = NSDateFormatterStyle.MediumStyle

let convDateNow = dateFormatter.stringFromDate(dateNow)
print("Date Now: \(convDateNow)")

let convDate1970 = dateFormatter.stringFromDate(date1970)
print("Date Now: \(convDate1970)")

let convRefDate = dateFormatter.stringFromDate(dateRef)
print("Date Now: \(convRefDate)")

我尝试在http://www.epochconverter.com转换它,它显示了正确的日期。但所有三种类型(timeIntervalSinceNowtimeIntervalSince1970timeIntervalSinceReferenceDate)都很奇怪。这是这些类型的结果。

Date Now: September 2, 48850 at 5:50:04 PM
Date Now: November 3, 48803 at 3:00:00 PM
Date Now: November 3, 48834 at 3:00:00 PM

那我在这里做错了什么?我只想区分现在的日期和json(时间戳)的日期。

任何帮助都会非常感激。谢谢!

1 个答案:

答案 0 :(得分:1)

请注意,当您使用epochconverter.com时,会显示一条消息"假设此时间戳位于毫秒"。

现在,尝试删除三个尾随零(小数点左侧)。它现在假设您正在处理秒数,它会给你相同的日期和时间。时间。

在iOS中,NSTimeInterval(或Swift中的TimeInterval)确实是一个double(或Double)的typedef,但它被解释为秒(精确到亚毫秒)。因此,各种NSDate()构造函数重载期望参数以秒表示。

因此,您可能需要将该时间戳除以1000,以便将毫秒转换为秒。