格式化时间戳后返回错误值
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 年后的日期,并且猜测您实际上给了它毫秒,因此它会根据该假设进行计算.
NSDate
的 timeIntervalSince1970
构造函数采用 NSTimeInterval
类型的参数,它始终是 秒 的度量,而不是毫秒。您需要将原始值除以 1000 以获得秒数,或者编写一个 NSDate
构造函数,该构造函数期望使用自 1970 年以来的毫秒数而不是秒数进行初始化,因为您使用的初始化程序期望.
您必须将 timestampDouble 除以 1000,因为 NSTimeInterval 以秒为单位,而您以毫秒为单位。
我正在尝试格式化时间戳,但返回了错误的值。
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 年后的日期,并且猜测您实际上给了它毫秒,因此它会根据该假设进行计算.
NSDate
的 timeIntervalSince1970
构造函数采用 NSTimeInterval
类型的参数,它始终是 秒 的度量,而不是毫秒。您需要将原始值除以 1000 以获得秒数,或者编写一个 NSDate
构造函数,该构造函数期望使用自 1970 年以来的毫秒数而不是秒数进行初始化,因为您使用的初始化程序期望.
您必须将 timestampDouble 除以 1000,因为 NSTimeInterval 以秒为单位,而您以毫秒为单位。