4

我正在尝试获取本地时间为 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 和 setSecond 行调整为

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

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

4

1 回答 1

10

问题是铁路时间直到 1883 年 11 月 18 日才实施。您忽略了设置年份,因此您得到的是在那之前的日期。在实施铁路时间之前,美国时区与格林威治标准时间的时差并不精确。我不确定 Apple 为您选择的确切时区,但无论是哪个时区,在 1883 年移至 PST 后似乎已调整了 7 分 2 秒。

于 2012-11-28T02:04:58.220 回答