NSDateFormatter显示错误的一年

即时通讯使用Xcode 4.5(4G182)与iOS 6. 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”

YYYY不一样。

根据IOSdate格式页面引用的这个页面 ;

 `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 (添加了粗体样式)