1

単体テストの特定の日付を設定しようとしています:

NSCalendar *calendar = [[NSCalendar alloc]
                         initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
[components setCalendar:calendar];
[components setYear:2011];
[components setMonth:5];
[components setDay:12];
[components setHour:1];
[components setMinute:0];
[components setSecond:0];

NSDate *date = [calendar dateFromComponents:components];
NSLog(@"Date I tried to set: %@", date);

ただし、これは「設定しようとした日付: 2011-05-11 17:00:00 +0000」と出力されます。日付が 1 日ずれているようで、時刻が 17:00:00 と表示される理由がわかりません。どうしてこれなの?

4

2 に答える 2

2

NSDate には、関連付けられたタイムゾーン データがありません。実際には、「2001 年 1 月 1 日 GMT の最初の瞬間」からわずか数秒です。したがって、日付コンポーネントとカレンダーは、ローカル タイムゾーンを使用して NSDate を作成しています。その NSDate は 2001 年 1 月 1 日 00:00 GMT からの正しい秒数ですが、ログに記録すると、ローカル タイムゾーンではなく GMT で日付が表示されます。記録された時刻を自分のタイムゾーンに合わせると、2011-05-12 01:00:00 になります。

于 2011-09-06T10:29:43.200 に答える