Ios 从存储在32/64位NSNumber中的unix时间戳创建NSDate

Ios 从存储在32/64位NSNumber中的unix时间戳创建NSDate,ios,objective-c,64-bit,nsdate,Ios,Objective C,64 Bit,Nsdate,我有以下代码: NSNumber *number = @(1388534400000); NSDate *date = [NSDate dateWithTimeIntervalSince1970:[number unsignedIntegerValue]]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateStyle:NSDateFormatterLongStyle]

我有以下代码:

NSNumber *number = @(1388534400000);

NSDate *date = [NSDate dateWithTimeIntervalSince1970:[number unsignedIntegerValue]];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterLongStyle];

[self.label setText:[dateFormatter stringFromDate:date]];

它写的是
2009。12月4日。
在我的iPhone 5和
45970上。11月27日。
在我的iPhone 5s上。我想原因是,在32位体系结构上,unix时间戳是以秒为单位处理的,但在64位上,它们需要以毫秒为单位。如何检测体系结构?在64位体系结构上除以1000是解决这个问题的好方法吗?有没有更优雅的方法来处理这个问题?

这不是64位问题

NSTimeInterval
定义为
double
,因此使用:

NSNumber *number = @(1388534400.000);
NSDate *date = [NSDate dateWithTimeIntervalSince1970:[number doubleValue]];

这不是op写的数字。@Droppy no这是数字/1000.0,因为
NSTimeInterval
是一个以毫秒为单位的双精度小数部分。op的代码就像他们在调用
unsignedIntegerValue
后简单地添加
/1000
一样工作。是的,op没有明确说明数字是unix epoch*1000。如果您将数字除以1000,代码将正常工作。顺便说一句,该数字的正确日期是UTC 2014年1月1日。