53

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

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」と出力されます

4

1 に答える 1

156

YYYYと同じではありませんyyyy

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 の週番号の年番号は常に、従来のグレゴリオ暦の年番号と同じです。

例:

2008年 12 月 29 日月曜日は「 2009 -W01-1」と書かれています。

2010 年1 月 3 日日曜日は「 2009 -W53-7」と書かれています。

https://en.wikipedia.org/wiki/ISO_8601#Week_datesより (太字を追加)

于 2012-09-14T11:07:18.630 に答える