1

この日付のタイムスタンプを解析しようとしています文字列の開始:

Wed, 11 Sep 2013 08:51:41 EEST

この問題は

EEST

、 z または zzz または V を試しましたが、何も起こりませんでした。日付フォーマッタは常に NULL になります。

ストリングから EEST をカットしている間、すべてがうまくいきます。

この問題を解決する方法を誰かが提案できますか?

ありがとう

アップデート:

dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_EN_POSIX"]];
[dateFormat setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"EEST"]];
[dateFormat setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss V"];
dateFromString = [dateFormat dateFromString:beginString];
4

2 に答える 2

3

この問題の解決策は、ロケールを に変更することです。これen_GBにより、日付フォーマッターが日付文字列を適切に解析できるようになります。

これは、レーダー #9944011に対する Apple 開発者バグ報告チームからの説明です。

これは iOS 5 での意図的な変更です。問題は次のとおりです。z (=zzz) または v (=vvv) で指定された短い形式では、あいまいさが多くなる可能性があります。For example, "ET" for Eastern Time" could apply to different time zone in many different regions. 書式設定と解析の信頼性を向上させるために、短縮形は、"cu" (一般的に使用される) フラグが設定されているロケールでのみ使用されます。それ以外の場合は、長い形式のみが使用されます (書式設定と解析の両方に使用されます) これは、オープンソースの CLDR 2.0 / ICU 4.8 での変更であり、iOS 5 の ICU の基礎となっています。 NSDateFormatter の動作の。

"en" ロケール (= "en_US") の場合、Alaska、America_Central、America_Eastern、America_Mountain、America_Pacific、Atlantic、Hawaii_Aleutian、および GMT などのメタゾーンに対して cu フラグが設定されます。Europe_Central には設定されていません。

ただし、「en_GB」ロケールの場合、cu フラグは Europe_Central に設定されます。

したがって、短いタイムゾーン スタイル「z」または「zzz」とロケール「en」または「en_US」に設定されたフォーマッタは、「CEST」または「CET」を解析しませんが、代わりにロケールが「en_GB」に設定されている場合は解析します。それらの。「GMT」スタイルはすべてで解析されます。

フォーマッタが長いタイムゾーン スタイル「zzzz」に設定されていて、ロケールが「en」、「en_US」、または「en_GB」のいずれかである場合、次のいずれかが明確であるため、解析されます。

「太平洋夏時間」「中央ヨーロッパ夏時間」「中央ヨーロッパ時間」

于 2013-09-12T13:24:58.663 に答える
3

代わりにこれを試してください:

NSString *beginString = @"Wed, 11 Sep 2013 08:51:41 EEST";
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en-GB"]];
[dateFormat setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss zzz"];
NSDate *dateFromString = [dateFormat dateFromString:beginString];

詳細・解説はこちら

于 2013-09-12T13:21:34.787 に答える