我正在尝试获取一个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)。
答案 0 :(得分:9)
问题在于铁路时间直到1883年11月18日才实施。你忽略了设定一年,所以你要在此之前得到一个日期。在实施铁路时间之前,美国时区与格林威治标准时间的确不同。我不确定Apple为你选择了什么时区,但是在1883年转移到PST时,似乎已经调整了7分2秒。