質問

このコード

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]);

コンソールの以下を示します。

Europe/Moscow (MSKS) offset 14400 (Daylight)

Europe/Moscow (MSKS) offset 14400 (Daylight)

2011-08-31 20:00:00 +0000

したがって、カレンダーとコンポーネントのタイムゾーンは正しく指定されていますが、 [gregorian dateFromComponents:comp] 間違ったタイムゾーン(GMT)でNSDATE値を返します。

適切なタイムゾーンを取得するには、何を修正する必要がありますか?

役に立ちましたか?

解決

表示されている出力は完全に正常です。 nslog a NSDate 直接オブジェクト、あなたは何でも取得します description メソッドは、日付のGMT表現です(ただし、石に刻まれていません)。

NSDate オブジェクトはタイムゾーンの対象ではありません。 a NSDate を表します 絶対の 参照日から測定された時間の瞬間。たとえば、執筆時点では、現在の日付は 337035053.199801 (参照日から数秒)。 2011-09-06 20:50:53 GMT また 2011-09-06 22:50:53 CEST. 。どちらも異なる人間の読み取り可能な表現です 同じ 日にち。

結論として、適切なタイムゾーンを取得するには何が必要ですか?使用する必要があります NSDateFormatter あなたの文字列表現を取得するため NSDate どんなタイムゾーンでもあなたが好きなもの。

他のヒント

この質問はかなり頻繁に発生し、答えは NSDateFormatter 日付形式の目的の出力を取得します。現在、GMT TimeZoneで常に印刷されています。これがドキュメントの議論です NSDate:

討論
表現は、オペレーティングシステムの異なるリリース全体で一定のままであることは保証されていません。日付をフォーマットするには、代わりにフォーマッタオブジェクトを使用する必要があります(nsdateFormatterおよびデータフォーマットガイドを参照)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top