20

このように 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"];
4

2 に答える 2

23

タイム ゾーンを表示したくない場合は、フォーマット文字列から末尾の「z」文字を削除します。

編集

一方、タイムゾーン名だけを表示したい場合は、「z」を大文字にします。((編集:名前付きタイムゾーンの「z」小文字、つまりPST、-0800の大文字「Z」のままにしてください))

編集

小文字の「z」は他のすべてのタイムゾーンで問題なく機能しますが、残念ながら GMT は特殊なケースです。したがって、最も簡単な方法は、'z' を省略し、書式設定された日付に "GMT" を追加することです。

于 2010-09-14T19:21:36.710 に答える
4

受け入れられた回答にタイプミスがありました。

一方、タイムゾーン名だけを表示したい場合は、「z」を大文字にします。

名前付きタイムゾーン、つまり PST の場合は小文字の 'z' を残し、-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

于 2013-01-23T20:35:48.007 に答える