设置NSDateComponents导致不正确的NSDate

我试图得到一个NSDate对象有当地时间21:00 – 不在乎哪一天。 我抓着这个非常奇怪的结果:

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和setSecond线来

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

我得到0001-01-02 05:00:00 +0000 ,这是正确的(21:00 PST)。

问题在于铁路时间直到1883年11月18日才被执行。你没有设定一年,所以你在这之前得到一个date。 在实施铁路时间之前,美国时区与GMT的时差不是确切的时差。 我不确定苹果会为你select什么时区,但是在1883年移到PST时,似乎已经调整了7分2秒。