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 PST ですが、結果は現地時間と変わりません。

setMinute と setSecond の行を調整すると

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

これ0001-01-02 05:00:00 +0000は正しいです (21:00 PST)。

4

1 に答える 1

10

問題は、鉄道時刻が 1883 年 11 月 18 日まで実装されなかったことです。年を設定することを怠っているため、それより前の日付を取得しています。鉄道の時刻が導入される前は、米国のタイム ゾーンは GMT と正確に時差がありませんでした。Apple がどのタイム ゾーンを選択したか正確にはわかりませんが、1883 年の PST への移行時に 7 分 2 秒調整されたようです。

于 2012-11-28T02:04:58.220 に答える