最近遇到一个bug,在iPhone上获取当前的时间戳,没有问题,而用iPad来测试的时候,出现了时间戳不对。当时的代码 (需要精确到毫秒,所以*1000)
NSTimeInterval t = [[NSDate date] timeIntervalSince1970]*1000; NSString *timestamp = [NSString stringWithFormat:@"%ld", (long)t]; NSLog(@"timestamp =%@",timestamp);
后来,查了很多资料,发现测试iPad是32位的,iPhone是64位的,32位的long只有4个字节,64位的long有8个字节。
里面的[[NSDate date] timeIntervalSince1970]*1000是double类型(8个字节),强转为long4个字节,所以出现了时间戳不对。修改改后的代码 (long long 为8个字节)
NSTimeInterval t = [[NSDate date] timeIntervalSince1970];
long long time = t*;
NSString *timestamp = [NSString stringWithFormat:@"%lld", time]; NSLog(@"timestamp =%@",timestamp);