1

NSDateComponentsでNSDateオブジェクトを取得したいが、NSDateの時間はコンポーネントで1時間遅い。NSDateの結果 - (NSDate *)dateFromComponents:(NSDateComponents *)comps

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

答えて

0

私はあなたがヨーロッパにいることに注意して、1時間先にGMTの。日付を18:xxに設定すると、ヨーロッパで設定されていると考えられますので、GMTに格納する前に1時間を減算します。あなたがそれを印刷するとき、それは現地時間にフォーマットされることを要求していないので、それはあなたにGMTを与えています、それは17:xxです。

あなたはNSDateFormatterを使用し、そのロケールおよびタイムゾーンを設定する必要があります - あなたはNSCalendarオブジェクトでやったよう - と、それにstringFromDateを呼び出し、作成した日付を渡します。