JSON日期转换为NSDate,以及反向转换

4

我有一个JSON日期,例如:1295804021525,它是从1970年开始的毫秒数。

我编写了以下代码将此数字转换为NSDate:

long long seconds = [[payload valueForKey:@"starttime"]longLongValue]/1000;  
NSDate *somedate = [NSDate dateWithTimeIntervalSince1970:seconds];

这段代码可以正常工作并返回正确日期。首先,我想知道这是否是最好的转换方式。

接下来,我想知道如何将日期转换回毫秒格式,然后将其放入URL中发送回服务器。

我已经有了以下代码:

long long date = [somedate timeIntervalSince1970] * 1000;
NSString *urlString = [NSString stringWithFormat:@"http://someurl?since=%qi",date];

再次尝试似乎可以解决问题,但我想知道如何使用NSNumber实现相同的功能。


你需要使用-valueForKey:吗?为什么不用-objectForKey:呢? - user557219
“payload” 在这种情况下是一个“NSArray”,而不是“NSDictionary”,但我很想知道这会带来什么好处?谢谢。 - cjroebuck
1个回答

11

使用您原来的转换方式,会损失亚秒级别的精度。您可能需要像下面这样做:

CFTimeInterval seconds = [[payload valueForKey:@"starttime"] doubleValue] / 1000.0;
第二段代码应该可以正常工作。我不确定为什么您认为使用NSNumber会有所帮助。通过我提到的修改,这两个代码片段都很简单,并且应该能够正常工作。

在这种情况下,我认为NSTimeInterval可能更语义上正确(因为我们正在使用NSDate),尽管类型本身与CFTimeInterval完全相同。 - Lily Ballard
谢谢Kevin,我今晚会尝试一下。我在某个地方读到过NSNumber比它所包装的原始类型更具平台独立性,这就是为什么我认为使用它会更好的原因? - cjroebuck
其实,忘了吧,我之前读到的是 NSInteger 在不同架构类型下是不同的,而不是 NSNumber - cjroebuck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接