创建NSDate时iphone设备和模拟器之间的不一致

时间:2014-03-19 18:16:22

标签: iphone nsdate ios7.1

在模拟器和iPhone设备上使用dateWithTimeIntervalSince1970创建NSDates时,我遇到了一个奇怪的问题。我只是将ISO8601时间戳从NSDate转换为毫秒,然后再转换回NSDate。

NSDateFormatter *iso8601Formatter = [[NSDateFormatter alloc] init];
iso8601Formatter.dateFormat = TSMISO8601FormatString; // "yyyy-MM-dd'T'HH:mm:ssZZZZZ"

NSDate startDate = [iso8601Formatter dateFromString: @"2014-03-19T09:46:00-06:00"];
long startTimeMilliseconds = [startDate timeIntervalSince1970] * 1000;
startDate = [NSDate dateWithTimeIntervalSince1970:(startTimeMilliseconds / 1000)];


当我在模拟器上运行时,我得到相同的日期,但是当我在iPhone上运行它时,我会回来。我真的很困惑为什么我要回到一个截然不同的日子

1970-01-25 20:31:23 +0000  // iPhone device results

我已经检查过以确保我的时区,日期和时间格式都相同,只是为了确保这不是问题。两者都在运行iOS 7.1。我还试图为NSDateFormatter设置语言环境和时区,但没有成功。

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

此:

long startTimeMilliseconds = [startDate timeIntervalSince1970] * 1000;

应该是:

double startTimeMilliseconds = [startDate timeIntervalSince1970] * 1000;

这就是为什么,

LONG_MAX可以找到最大长度,它会记录:

  

2147483647

您当前的时间间隔是:

  

1395243960000.000000

很长时间不够大。