我从数据库中获取了一个 unix 时间戳,我正在尝试从中创建一个人类可读的日期。我是这样用的
long t1=[time longLongValue];
NSDate* date=[NSDate dateWithTimeIntervalSince1970:t1];
其中 time 是时间戳。当我打印日期时,我得到
1956-02-18 19:04:01 +0000
代替
2013-01-02 12:31:03 +0000
时间戳是 1356765933449
最佳答案
正如鲍里斯在他的回答中正确指出的那样,这是一个整数溢出问题。
我不知道你的 time
对象是什么,但不是 signed long int
使用 NSTimeInterval
。
在 iOS 上 NSTimeInterval
当前定义为
typedef double NSTimeInterval;
但你不应该太在意这个。坚持使用类型同义词可以保护你,以防 Apple 决定将基础定义更改为其他内容。
也就是说你应该把你的代码改成类似的东西
NSTimeInterval epoch = [time doubleValue];
NSDate * date = [NSDate dateWithTimeIntervalSince1970:epoch];
关于我之前描述的代码可维护性问题,这里你明确地使用了一个doubleValue
(你没有太多选择),但好消息是如果苹果改变了NSTimeInterval
定义为与 double
赋值不兼容的内容,编译器会通知您。
关于iphone - 如何将 unix 时间戳转换为人类可读时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14121403/