iPad Retina模拟器为NSDateFormatter提供与其他所有不同的输出

时间:2016-03-03 22:28:04

标签: ios iphone ipad

我在所有其他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

2 个答案:

答案 0 :(得分:0)

NSinteger不足以保持您在32位系统上的价值。使用无论平台如何都将保持64位的数据类型。或者只使用NSTimeInterval

NSString *strTimeStamp = [NSString stringWithFormat:@"%.0f", timeInMilliseconds];

答案 1 :(得分:0)

在32位器件上,NSInteger为32位,您可以看到1457038539613不适合32位。

我真的,真的建议您不要尝试将NSTimeInterval转换为其他格式。只需将NSTimeInterval作为重复计算秒数。使用类型NSTimeInterval表示一个数字,这意味着毫秒接近犯罪。