2

NSDateFormatter文字列から日付をエンコードおよびデコードするために、変更されていない同じものを使用しています。日付を文字列にエンコードするのはうまくいきますが、それを取り戻すのは奇妙なことにうまくいきません。ほとんどの日付は数か月ずれているため、タイムゾーンの問題ではありません. 私は持っている:

NSDateFormatter *_calibrationDateFormat = [[NSDateFormatter alloc] init];
[_calibrationDateFormat setDateFormat:@"EEEE MMM d, YYYY"];
NSString *text = @"Thursday Dec 6, 2018";
NSLog(@"%@\n%@", text, [_calibrationDateFormat dateFromString:text]);

出力:

Monday Aug 12, 2013
2012-12-31 05:00:00 +0000

他の日付でさらにいくつかの試行:

Friday Apr 12, 2013
2013-01-04 05:00:00 +0000

Saturday Oct 26, 2013
2013-01-05 05:00:00 +0000

Thursday Sep 10, 2015
2015-01-01 05:00:00 +0000

Thursday Jan 5, 2017
2017-01-05 05:00:00 +0000

それらの日付をデコードするロジックについては、本当に途方に暮れています。曜日を削除したり、3 文字の省略形の代わりに完全な月名を使用したりするなど、さまざまな形式も試しましたが、結果は同様に混乱を招きます。私のテストでは、UIDatePicker を使用し、結果の日付を同じ日付フォーマッタでエンコードしていたことに注意してください。そのような人間が読める日付文字列から日付オブジェクトを取得する信頼できる方法はありますか?

4

1 に答える 1

19

YYYY問題は、の代わりに使用していることだと思いますyyyy。大文字のバリアントは、「年の週」ベースのカレンダー用です (詳細については、UTS 仕様を参照してください)。実際には、多くの (ほとんどの?) 状況で文字通りの暦年を取得することと同じではありません。@"EEEE MMM d, yyyy"日付フォーマッタとして使用すると、これが修正される場合があります。

于 2013-02-12T17:58:13.080 に答える