我在所有其他iPad模拟器上运行了完全相同的代码。 iPhone和它工作正常。但是,当我在iPad Retina模拟器上运行时,它会给出不同的响应
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy/MM/dd HH:mm:ss.SSS"];
NSDate *dateFromString = [[NSDate alloc] init];
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
[dateFormatter setTimeZone:timeZone];
dateFromString = [dateFormatter dateFromString:savedTime];
NSTimeInterval timeInMiliseconds = [dateFromString timeIntervalSince1970]*1000;
NSInteger time = timeInMiliseconds;
NSString *strTimeStamp = [NSString stringWithFormat:@"%ld",(long)time];
NSLog(@"The Date is = %@",savedTime);
NSLog(@"The Timestamp is = %@",strTimeStamp);
然后返回: 日期是= 2016/03/03 20:55:39.613 时间戳是= -2147483648
如果这是在任何其他模拟器上,那将是正确的并返回: 日期是= 2016/03/03 20:55:39.613 时间戳是= 1457038539613
答案 0 :(得分:0)
NSinteger
不足以保持您在32位系统上的价值。使用无论平台如何都将保持64位的数据类型。或者只使用NSTimeInterval
。
NSString *strTimeStamp = [NSString stringWithFormat:@"%.0f", timeInMilliseconds];
答案 1 :(得分:0)
在32位器件上,NSInteger为32位,您可以看到1457038539613不适合32位。
我真的,真的建议您不要尝试将NSTimeInterval转换为其他格式。只需将NSTimeInterval作为重复计算秒数。使用类型NSTimeInterval表示一个数字,这意味着毫秒接近犯罪。