このコードNSCalendarのdateFromComponents:代わりsystemTimeZone
NSCalendar *calendar =[NSCalendar currentCalendar];
[gregorian setTimeZone:tz];
NSLog(@"%@", [gregorian timeZone]);
NSDateComponents *comp = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit) fromDate:[NSDate date]];
[comp setDay:info.day];
[comp setMonth:info.month];
[comp setYear:info.year];
[comp setHour:info.hour];
[comp setMinute:info.minute];
[comp setSecond:info.second];
[comp setTimeZone:tz];
NSLog(@"%@", [comp timeZone]);
NSLog(@"%@", [gregorian dateFromComponents:comp]);
のGMTタイムゾーンは、コンソールで次の例を示します。
Europe/Moscow (MSKS) offset 14400 (Daylight)
Europe/Moscow (MSKS) offset 14400 (Daylight)
2011-08-31 20:00:00 +0000
だから、カレンダー、コンポーネントのタイムゾーンが正しく指定されているが、NSDate値を[gregorian dateFromComponents:comp]
返します間違ったタイムゾーン(GMT)で
適切なタイムゾーンを取得するには、何を修正する必要がありますか?
あなたが直接 'NSDate'objectをのNSLog場合、あなたは常にGMT表現を取得します。とにかく、 'NSDate'オブジェクトにはタイムゾーンの概念がありません。それらは、基準日から測定された**絶対的な瞬時値**を表します。あなたは 'NSDateFormatter'を使って、異なる時間帯の日付の異なる人間が読める*表現*を得ることができますが、それらは表現です。 – albertamg
私は、NSDateがタイムスタンプの重要でないビットで派生したタイムゾーンを隠していると思います。しかし、これは[NSDate description]にのみ使用されることを意図しており、最高で信頼できません。 –
ええ、そうですね。 ありがとう、今私はそれを得る:) – Mitry