iphone - 如何将 unix 时间戳转换为人类可读时间?

标签 iphone objective-c ios xcode nsdate

我从数据库中获取了一个 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/

相关文章:

ios - 无法通过 iphone sdk 中的 [FBSDKAccessToken currentAccessToken] 获取访问 token

ios - 如何跟踪打开 iPhone 应用程序的次数?

iphone - 通过Lua访问对象(iPhone SDK)

objective-c - clang : error: -Z-reserved-lib-stdc++: 'linker' input unused when '-c' is present after update to xCode 4. 4

ios - EXC_BAD_ACCESS KERN_INVALID_ADDRESS 但内存未被删除

javascript - 在 iframe 中输入字段会导致 iframe 滚动到底部

iphone - 创建不带应用名称的本地通知

iphone - 苹果的MFi计划

ios - 在 NSMutableArray 中存储指向结构的指针

ios - 如何在 iOS Speech API 上检测语音开始