5

サーバーから取得した日付文字列をローカルNSDateに変換する必要があります。文字列は次のようになります。

"Fri, 30 Nov 2012 00:35:18 GMT"

しかし、今は11月30日金曜日の午前11:36です。文字列を意味のあるローカルNSDateに変換するにはどうすればよいですか?

私が見つけた:

iPhone:NSDateはGMTを現地時間に変換します

しかし、それは逆のように見えます。

4

2 に答える 2

15

NSDateは常に日付を内部的にGMTで保存することに注意してください。次に、日付フォーマッタを使用して、ローカルタイムゾーンに文字列を作成します。この場合、文字列から開始するため、最初に日付フォーマッタを使用して日付を作成してから、もう一度使用してローカルタイムゾーン(タイムゾーンがデフォルトでない場合)に文字列を作成する必要があります。指定)。

NSString *dateString           = @"Fri, 30 Nov 2012 00:35:18 GMT";

NSDateFormatter *dateFormatter = [NSDateFormatter new];
dateFormatter.dateFormat       = @"EEE, dd MM yyyy HH:mm:ss zzz";

NSDate *date                   = [dateFormatter dateFromString:dateString];
NSString *localDateString      = [dateFormatter stringFromDate:date];

NSLog(@"%@", localDateString);
// Results:  Thu, 29 11 2012 19:35:18 EST
于 2012-11-30T00:49:32.020 に答える
1

NSDateFormatter書式設定文字列と一緒に使用するだけeee, dd MMM yyyy HH:mm:ss zzzです。最後のZにより、文字列からタイムゾーンが読み取られます。

したがって、QA1480が与えられた場合、サンプルコードは次のようになります。

NSLocale *usLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease];
NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setLocale:usLocale];
[formatter setDateFormat:@"eee, dd MMM yyyy HH:mm:ss zzz"];
_createdAt = [formatter dateFromString:dateString];
于 2012-11-30T00:41:25.160 に答える