设置NSDateComponents会导致NSDate不正确

时间:2012-11-28 01:35:35

标签: objective-c ios nsdate nsdatecomponents

我正在尝试获取一个21:00作为当地时间的NSDate对象 - 不关心哪一天。我对这个非常奇怪的结果感到头疼:

NSCalendar *calendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setHour:21];
[components setMinute:0];
[components setSecond:0];

NSDate *date = [calendar dateFromComponents:components];
NSLog(@"%@", date);

结果为0001-01-02 04:52:58 +0000

我不知道为什么。当前时间是太平洋标准时间17:34,但结果不会随当地时间而变化。

如果我调整setMinute并将第二行设置为

[components setMinute:7];
[components setSecond:2];

我得到0001-01-02 05:00:00 +0000,这是正确的(太平洋标准时间21:00)。

1 个答案:

答案 0 :(得分:9)

问题在于铁路时间直到1883年11月18日才实施。你忽略了设定一年,所以你要在此之前得到一个日期。在实施铁路时间之前,美国时区与格林威治标准时间的确不同。我不确定Apple为你选择了什么时区,但是在1883年转移到PST时,似乎已经调整了7分2秒。