Ios NSDateFormatter返回错误的年份

Ios NSDateFormatter返回错误的年份,ios,objective-c,nsdate,nsdateformatter,Ios,Objective C,Nsdate,Nsdateformatter,我需要将收到的日期字符串重新格式化为另一种格式以供进一步使用 我得到:“1.2016年1月”,应该转换为:2016-01-01 我的方法是将原始字符串转换为NSDate,然后使用NSDateFormatter构建最终字符串 原始字符串: NSString *originalDate = @"1.Januar 2016"; 转换为NSDate: NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; dateFormatt

我需要将收到的日期字符串重新格式化为另一种格式以供进一步使用

我得到:“1.2016年1月”,应该转换为:2016-01-01

我的方法是将原始字符串转换为NSDate,然后使用NSDateFormatter构建最终字符串

原始字符串:

NSString *originalDate = @"1.Januar 2016";
转换为NSDate:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.locale=[[NSLocale alloc] initWithLocaleIdentifier:@"de_DE"];
dateFormatter.dateFormat=@"dd.MMMM yyyy";
dateFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];
NSDate *date = [dateFormatter dateFromString:originalDate];
NSLog(@"nsdate = %@", date);
设置月份和年份的NSDateFormatters(日期不相关,始终为“1”):

不幸的是,我得到了这样的结果:

2015-08-21 14:36:05.189 Test[315:63610] nsdate = 2016-01-01 00:00:00 +0000
2015-08-21 14:36:05.194 Test[315:63610] date = 2015-01-01
这一年落后了一年。这只发生在一月份,没有其他月份


我想这是时区的问题,但我不明白为什么只有年份落后,而不是月份。

你应该使用
yyyy
,而不是
yyyy
,问题解决了,非常感谢。你是如何解决这个问题的?从,yyyy是“年”(以“年中的一周”为基础的日历)。通常,长度指定填充,但对于两个字母,它还指定最大长度。此年份名称用于ISO 8601定义的ISO年-周日历,但可用于需要周日期处理的非公历日历系统。可能不总是与日历年相同的值。”底线,使用
YYYY
设置一年中的一周格式,否则使用
yyy
2015-08-21 14:36:05.189 Test[315:63610] nsdate = 2016-01-01 00:00:00 +0000
2015-08-21 14:36:05.194 Test[315:63610] date = 2015-01-01