你的值有误。
我颠倒了这个过程,从你想要的日期字符串开始,并通过这段代码运行它:
let dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = .MediumStyle
dateFormatter.timeStyle = .ShortStyle
let date = dateFormatter.dateFromString("Feb 20, 2016, 11:13 PM")
let timeInterval = date?.timeIntervalSince1970
在 Swift Playground 中,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"。
当然,请注意您从第一个 sn-p 获得的 exact 时间间隔(1456031580 数字)和您为 exact 得到的字符串em>那个具体数字取决于你的时区。
一旦你链接到Epoch Converter,我将你的原始值粘贴到这里,确实得到了二月的正确值。但请务必注意粗体字。
假设这个时间戳以毫秒为单位:
网站看到这个数字会给你一个未来 46,000 年的日期,猜测你实际上给了它毫秒,所以它会根据这个假设进行计算。
NSDate 的timeIntervalSince1970 构造函数采用NSTimeInterval 类型的参数,它始终是秒 的度量,而不是毫秒。您需要将原始值除以 1000 以获得秒数,或者编写一个 NSDate 构造函数,该构造函数期望使用自 1970 年以来的毫秒数而不是秒数进行初始化,正如您使用的初始化程序所期望的那样。