NSDateFormatter显示错误的一年

时间:2012-09-14 11:00:30

标签: nsdateformatter ios6

即时通讯使用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"

1 个答案:

答案 0 :(得分:110)

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日星期一 2008 写成“ 2009 -W01-1”

     

1月3日星期日 2010 写的是“ 2009 -W53-7”

来自https://en.wikipedia.org/wiki/ISO_8601#Week_dates (添加了粗体样式)