0

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;

迅速な助けをありがとう。

4

2 に答える 2

1

NSDateFormatter.setTimeZoneを使用して UTC を強制的に使用したいだけだと思います。おそらく文字列に「GMT」という文字が含まれていないため、フォーマット文字列を変更したくありません。代わりに、文字列が解釈されるタイムゾーンを変更する必要setTimeZoneがあります。

于 2011-11-02T11:15:15.403 に答える
1

setTimeZone メソッドを使用する必要があります: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html

于 2011-11-02T11:15:21.113 に答える