设置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秒。