web-dev-qa-db-ja.com

NSDateFormatterが間違った年を表示する

iOS 6でxcode 4.5(4G182)を使用しています。iOS6でNSDateFormatterに間違った年が表示されます。解決するにはどうすればよいですか。

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

2012-09-14 == 2011-09-13 16:00:00 +0000」と出力します

43
Simon

YYYYyyyyと同じではありません。

このページ によると iOS日付形式ページ 参照;

`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日月曜日2008は「2009-W01-1」と書かれています

1月3日2010は「2009-W53-7」と表記されます

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

133