GMT時間修飾子なしでTimeZoneを使用してNSDateFormatterを使用してNSDateをNSSTRINGに変換します

StackOverflow https://stackoverflow.com/questions/3712140

質問

したがって、私は私の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」文字を削除します。

編集

一方、TimeZoneの名前を表示するだけの場合は、「Z」大文字を作成してください。 ((編集:名前付きTimeZoneの 'z'小文字を残します。つまり、-0800の大文字「Z」)))

編集

小文字「Z」は他のすべてのタイムゾーンで正常に機能しますが、残念ながらGMTは特別なケースです。したがって、最も簡単なことは、「z」を省略し、フォーマットされた日付に「GMT」を追加することです。

他のヒント

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

一方、TimeZoneの名前を表示するだけの場合は、「Z」大文字を作成してください。

名前付きTimeZoneの「Z」小文字、つまりPST、および大文字「Z」を-0800のままにしておきます

    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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top