1

NSDateComponentsを使用してNSDateオブジェクトを取得したいのですが、NSDateの時間がコンポーネントよりも1時間短くなっています。

NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[cal setLocale:[NSLocale currentLocale]];
[cal setTimeZone:[NSTimeZone localTimeZone]];
NSDateComponents *hourComp = [[NSDateComponents alloc] init];
hourComp.timeZone = [NSTimeZone localTimeZone];
[hourComp setHour:18];

NSLog(@"%@",hourComp);
NSLog(@"%@",[cal dateFromComponents:hourComp]);
NSLog(@"%@",[NSDate date]);

コンソール出力:

2012-04-10 19:10:57.505 TestDate[9861:f803] <NSDateComponents: 0x6b6ad30>
TimeZone: Europe/Berlin (CEST) offset 7200 (Daylight)
Hour: 18
2012-04-10 19:10:57.507 TestDate[9861:f803] 0001-01-01 17:06:32 +0000
2012-04-10 19:10:57.508 TestDate[9861:f803] 2012-04-10 17:10:57 +0000

私が欲しいのは18:xx:xxです

4

1 に答える 1

0

あなたはヨーロッパにいて、GMTより1時間進んでいることに注意してください。日付を18:xxに設定すると、ヨーロッパで設定していると見なされるため、GMTに保存する前に1時間を差し引きます。印刷するときは、現地時間に合わせてフォーマットするように求めているわけではないので、GMT(17:xx)が表示されます。

を使用しNSDateFormatter、そのロケールとタイムゾーンを(オブジェクトの場合と同じように)設定してから、NSCalendarオブジェクトを呼び出しstringFromDateて、作成した日付を渡す必要があります。

于 2012-04-10T18:14:34.030 に答える