首页 > IOS如果转换十三位的时间戳?

IOS如果转换十三位的时间戳?

如果从服务器传回的数据是13位的时间戳 怎么转换为时间呢?


    NSString * timeStampString = @"1423189125874";
    NSDate *date = [NSDate dateWithTimeIntervalSince1970:[timeStampString doubleValue] / 1000];
    NSLog(@"%f", ([date timeIntervalSince1970] * 1000.0));

输出

2015-02-06 10:51:35.323 iOSTest[4359:67092] 1423189125874.000000

NSTimeInterval是 double 类型的,所以除以 1000 就不会丢精度了。


我们也遇到了同样的问题,服务端是 Java(Jersey + Jackson)输出的时间戳是 13 位的,而 iOS 要求是 10 位的……

Stackoverflow 的回答是:Java 时间戳是精确到毫秒的,就是 13 位的。

For what it's worth, that number is standard Java timestamp (used by JDK classes); Unix stores seconds, Java milliseconds, which is why it's bit larger value.

另外一个帖子 提供了解决方法

除 1000

示例代码如下:

double timestampval =  [[updates objectForKey:@"timestamp"] doubleValue]/1000;
NSTimeInterval timestamp = (NSTimeInterval)timestampval;
NSDate *updatetimestamp = [NSDate dateWithTimeIntervalSince1970:timestamp];

NSString * timeStampString = @"1423189125873";
NSTimeInterval _interval=[[timeStampString substringToIndex:10] doubleValue];
NSDate *date = [NSDate dateWithTimeIntervalSince1970:_interval];
NSLog(@"%@", date);

======================

保留毫秒

NSString * timeStampString = @"1423189125873";
NSTimeInterval _interval=[timeStampString doubleValue] / 1000.0;
NSDate *date = [NSDate dateWithTimeIntervalSince1970:_interval];
NSDateFormatter *objDateformat = [[NSDateFormatter alloc] init];
[objDateformat setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSS"];
NSLog(@"%@", [objDateformat stringFromDate: date]);

除以1000

【热门文章】
【热门文章】