2012-09-14 7 views
31

iOS 6でxcode 4.5(4G182)を使用しています。NSDateFormatterはiOS 6で間違った年を示しています。NSDateFormatterが間違った年を示す

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateFormat:@"YYYY-MM-dd"]; 
NSString *str = [dateFormatter stringFromDate:[NSDate date]]; 
NSLog(@"%@ == %@",str,[[dateFormatter dateFromString:str] description]); 

それは " -09-14 == -09-13 16時〇〇分00秒0000" は

+0

「iOS 6の問題」とは思わない。小文字の 'y'を使うべきです。 http://stackoverflow.com/questions/6388370/string-formatted-date-picker-date-is-off/6388430#6388430を参照してください。 – Anna

答えて

97

YYYYyyyyと同じではありません。プリントアウト

this pageによると、IOS Date format pageが参照されます。

`y`: Year 
`Y`: Year (in "Week of Year" based calendars). This year designation is used in 
    ISO year-week calendar as defined by ISO 8601, but can be used in 
    non-Gregorian based calendar systems where week date processing is desired. 
    May not always be the same value as calendar year. 

最後の動作文。代わりにyyyyを使用してください。どのように、なぜ年の値がずれていてもよいの


さらに詳細YYYYを使用して:

ISO週番号付け年間は週 01の最初の日(月曜日)から始まり、で終わる

新しいISO年の前の日曜日(したがって、 の重複またはギャップなし)。それは52または53 フル週で構成されています。 ISO の週番号の年数は、伝統的な グレゴリオ暦年の金曜日、土曜日、日曜日、または 土曜日と日曜日の数字、または伝統の始まりのちょうど日曜日の数字から逸脱しています グレゴリオ暦年(以前のISO の週番号の末尾にあります)、月曜日、火曜日、水曜日、または月曜日の と火曜日、または月曜日、伝統的なグレゴリオ暦 暦年の終わり次のISO週番号 年の01週)。木曜日の場合、ISO週番号の年の数字は、通常、グレゴリオ暦の暦年の数字に等しい です。

例:

月曜日12月29日 " -W01-1" 書かれ

を日曜日1月3日が書かれている " -W53-7"

からhttps://en.wikipedia.org/wiki/ISO_8601#Week_dates (太字のスタイリンg追加)

+0

ありがとうございます。私の問題も解決してくれます。:) – Mani

+2

この問題は長い間狂っています。ありがとうございました –

+2

フォーマットにYYYYを使用するフォーマッタを設計する際に、 「暦年と常に同じ価値を持つとは限りません」という年。 「QQQQ」や「XXXX」(例えば)がエラーを起こす可能性が低いですか? "ニーモニックの価値"は実際にはここで優先順位をつけるようなものではありません。 – Spike0xff

関連する問題