Web サービスから日付を読み込んでいます。日付を次の形式で送信しています (GMT 時間): 02/11/11 10:56:09
私はNSDateFormatterをそのまま使用してNSDateフォームを作成しています:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm:ss"];
NSDate *journeyDate = [dateFormatter dateFromString:str];
[dateFormatter release];
これを現在の日付と比較して相対的な時間間隔を取得した後、これはうまく機能します。
問題は、電話が別のタイムゾーンに設定されている場合、API から日付を読み込んで日付フォーマッタを使用する場合、電話が日付文字列が現地時間であると想定し、それを変換しているように見えることです。 GMTに。
例:
APIから午前10時の日付をロードします。電話は PDT に設定されています。日付フォーマッタは、午前 10 時の日付文字列が実際に電話に関連していると想定して NSDate を作成しています。
最終的には、10 時間足して午後 5 時の日付と時刻になります。
日付フォーマッタで文字列が GMT であることを指定しようとしていますが、問題が発生しています。フォーマットに GMT を追加して、次のことを試しました。
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm:ss GMT"];
NSDate *journeyDate = [dateFormatter dateFromString:str];
[dateFormatter release];
これは機能していません。
誰でもアドバイスできますか?
解決
要約すると、GMTを元の文字列に追加し、それをフォーマットすることで、ひどい回避策で機能するようになりました。
NSString * cheat = [NSString stringWithFormat:@"%@ GMT", str];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm:ss zzzz"];
NSDate *journeyDate = [dateFormatter dateFromString:cheat];
[dateFormatter release];
return journeyDate;
文字列がタイムゾーンを含むように変更されると、機能しなくなるため、これは一種の不安定なハックでした。私のように行う必要がある人のために、以下は NSTimeZone を作成する方法の簡単な例です。
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm:ss"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
NSDate *journeyDate = [dateFormatter dateFromString:str];
[dateFormatter release];
return journeyDate;
迅速な助けをありがとう。