NSDateFormatterを次のように初期化しています:
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]];
[dateFormatter setDateFormat:@"EEE, d MMM yyyy HH:mm:ss z"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSDate *date = [NSDate date];
NSString *dateString = [dateFormatter stringFromDate:date];
dateString
は次のとおりです:
Thu, 29 Jul 2010 14:58:42 GMT+00:00
「+00:00」を解消したい
http://unicode.org/reports/tr35/tr35-6.html#Time_Zone_Fallback から、ローカライズの問題が発生していると推測しています。現在、「+ 00:00」を手動で削除してこの問題を回避していますが、それは理想的ではありません。
[〜#〜]編集[〜#〜]
NSTimeZoneを作成するためにいくつかの新しい方法を試しましたが、どちらも同じdateString
を生成します。
[NSTimeZone timeZoneWithName:@"GMT"];
[NSTimeZone timeZoneWithName:@"UTC"];
[NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[NSTimeZone timeZoneWithAbbreviation:@"UTC"];
タイムゾーンを表示したくない場合は、フォーマット文字列から末尾の「z」文字を削除してください。
[〜#〜]編集[〜#〜]
一方、タイムゾーン名だけを表示したい場合は、「z」を大文字にします。 ((編集:名前付きタイムゾーンの場合は「z」を小文字のままにします。つまり、PSTと-0800の場合は大文字の「Z」のままにします))
[〜#〜]編集[〜#〜]
小文字の「z」は他のすべてのタイムゾーンで正常に機能しますが、残念ながらGMTは特殊なケースです。したがって、最も簡単な方法は、「z」を省略して、フォーマットされた日付に「GMT」を追加することです。
受け入れられた回答にはタイプミスがありました。
一方、タイムゾーン名だけを表示したい場合は、「z」を大文字にします。
名前付きタイムゾーンには小文字の「z」、つまりPSTを残し、-0800には大文字の「Z」を残す
NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"MMMM dd, yyyy (EEEE) HH:mm:ss z Z"];
NSDate *now = [NSDate date];
NSString *nsstr = [format stringFromDate:now];
// 2013年1月23日(水)12:33:46 PST -0800