格式化时间戳后返回错误值

Wrong value returned after formatting timestamp

我正在尝试格式化时间戳,但返回了错误的值。

let timestampDouble: Double = 1455970380471
let timestamp = NSDate(timeIntervalSince1970: timestampDouble)
let formattedTimestamp = NSDateFormatter.localizedStringFromDate(timestamp, dateStyle: .MediumStyle, timeStyle: .ShortStyle)

formattedTimestamp returns Jun 22, 48115, 8:49 AM 而不是 Feb 20, 2016, 11:13 PM 的正确时间戳(来自 epochconverter.com)。

你的值有误。

我颠倒了这个过程,从你想要的日期字符串开始,然后运行通过这段代码:

let dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = .MediumStyle
dateFormatter.timeStyle = .ShortStyle
let date = dateFormatter.dateFromString("Feb 20, 2016, 11:13 PM")
let timeInterval = date?.timeIntervalSince1970

在 Swift 游乐场中,timeInterval 的值为 1456031580,比您使用的值短 位数 .

当我返回到您的原始代码并使用这个新值时:

let timestampDouble: Double = 1456031580
let timestamp = NSDate(timeIntervalSince1970: timestampDouble)
let formattedTimestamp = NSDateFormatter.localizedStringFromDate(timestamp, dateStyle: .MediumStyle, timeStyle: .ShortStyle)

我们得到期望值:"Feb 20, 2016, 11:13 PM".

当然,请注意您从第一个片段和 exact[=50] 获得的 exact 时间间隔(1456031580 数字) =] string you get out for that 特定数字将取决于您的时区。


链接到 Epoch Converter 后,我将您的原始值粘贴到此处,确实得到了二月份的正确值。但请务必注意粗体文本。

Assuming that this timestamp is in milliseconds:

该网站看到该数字会为您提供 46,000 年后的日期,并且猜测您实际上给了它毫秒,因此它会根据该假设进行计算.

NSDatetimeIntervalSince1970 构造函数采用 NSTimeInterval 类型的参数,它始终是 的度量,而不是毫秒。您需要将原始值除以 1000 以获得秒数,或者编写一个 NSDate 构造函数,该构造函数期望使用自 1970 年以来的毫秒数而不是秒数进行初始化,因为您使用的初始化程序期望.

您必须将 timestampDouble 除以 1000,因为 NSTimeInterval 以秒为单位,而您以毫秒为单位。