2011-11-18 17 views
17

私はすでにこのような他のポストでは役に立たないと提案を試してみました。ここでの状況は次のとおりです。NSDateFormatter dateFromStringは、間違った日付を返します

Fri November 18, 2011 

と私はこのような日付にそれを変換しようとしています:

私はこのようなNSStringのを持って

NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
    [df setDateFormat:@"EE MMMM d, YYYY"]; 
    NSDate *myDate = [df dateFromString: dateString]; 

しかし、結果MyDateに該当する変数は、これを保持しています:

2010-12-31 00:00:00 +0000 

なぜ誰かが間違った日付がdateFr omString?文字列は11月18日、変換日は12月31日...

ありがとうございました!

+1

dateStringの値をログに記録して、それが期待どおりであることを確認する必要があります。また、 "EE"の代わりに "EEE"、 "d"の代わりに "dd"、 "YYYY"の代わりに "yyyy"を使用して試してみてください(あなたの作業はうまくいくはずです) –

+0

Thanks Tim - 'EEE MMMM d、yyyy'はうまく動作します:-) – sweaves

答えて

48

YYYYではなく、yyyyを使用する必要があります。 Apple referenceから

よくある間違いは、YYYYを使用することです。 yyyyはカレンダー年を指定し、YYYYはISO年年カレンダーで使用される年( "Week of Year")を指定します。ほとんどの場合、yyyyとYYYYは同じ番号を返しますが、異なる場合があります。通常、暦年を使用する必要があります。

EEからEEEに変更する必要があります。彼らは私のテストで同じ結果を出します。

+1

YYYYをyyyyに変更し、EEをEEEに変更しました - ありがとう! – sweaves

+1

偉大なヒント、ありがとう! – Chengjiong

+0

これはうまくいった!私は2013年にすべての日付を印刷するためにこのフォーマットを使用しました。12月29日、30日、31日だけが12月、29,30,31 2014年に表示されました。 – iosMentalist

1

"EEE MMMM d、YYYY"つまりフォーマット文字列として3倍のEが必要だと思います。これで問題が解決しない場合は、簡単な日付と形式のハードコーディングされた文字列を使用して問題を解決することをお勧めします。そのトピックに関するさらなるヒントについては、例えばNSDateFormatter not workingを参照してください。

+0

EEをEEEに変更することで、問題の一部が解決されました。ありがとうございます! – sweaves

関連する問題