2

NSDateフォーマッターを使用して、Facebook Graph APIリクエスト(GMT)から日付を取得し、それをユーザーのローカルタイムゾーンに変換しています。日付を正しく読み込んで新しいタイムゾーンを設定することはできますが、新しい日付を印刷すると、夏時間が考慮されていないようです。

以下の時間は実際にはリクエストから発生しますが、たとえばここでは、Facebookの応答から標準の時間文字列を入力するだけです

NSString *time = @"2012-04-12T15:25:09+0000"
NSTimeZone *localZone = [NSTimeZone localTimeZone];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setTimeZone:localZone];
[formatter setDateFormat:@"yyyy-mm-dd'T'HH:mm:ssZZZZ"];
NSDate *date = [formatter dateFromString:time];
[formatter setDateFormat:@"eee MMM dd, yyyy hh:mm a"];
NSString *dateStr = [formatter stringFromDate:date];
NSLog(@"%@",dateStr);

この日付を印刷すると、「2012年1月12日木曜日10:25 AM」が印刷されますが、これは、私がいる「America/New_York」タイムゾーンでは間違っています。「2012年1月12日木曜日11:25AM」または1時間先になります。夏時間を強制する方法はありますか?前もって感謝します!

編集:私はそれが実際に月を間違ってフォーマットしていることに気づきました。どういうわけか4月になって1月になります。なぜこれでしょうか?

4

1 に答える 1

8

この日付を印刷すると、「2012年1月12日木曜日10:25 AM」が印刷されますが、これは、私がいる「America/New_York」タイムゾーンでは間違っています。

いいえ。夏時間は3月まで開始されないため、その時間に適用するのは誤りです。NSDateFormatterここで正しいことをしています。

特定のGMTオフセットを強制する場合は、NSTimeZone timeZoneForSecondsFromGMT:の代わりにを使用する必要がありlocalTimeZoneます。

于 2012-04-12T16:36:33.030 に答える