NSDateFormatter返回错误的一年

时间:2015-08-21 12:42:37

标签: ios objective-c nsdate nsdateformatter

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

我得到:“1.Januar 2016”应转换为: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”):

NSDateFormatter *dateMonthFormatter = [[NSDateFormatter alloc] init];
dateMonthFormatter.locale=[[NSLocale alloc] initWithLocaleIdentifier:@"de_DE"];
dateMonthFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];
dateMonthFormatter.dateFormat=@"MM";

NSDateFormatter *dateYearFormatter = [[NSDateFormatter alloc] init];
dateYearFormatter.locale=[[NSLocale alloc] initWithLocaleIdentifier:@"de_DE"];
dateYearFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];
dateYearFormatter.dateFormat=@"YYYY";

NSString *finalString = [NSString stringWithFormat:@"%@-%@-01",[dateYearFormatter stringFromDate:date], [dateMonthFormatter stringFromDate:date]];

NSLog(@"date = %@", finalString);

可悲的是我得到了这个结果:

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

今年落后1年。这只发生在一月,没有其他月份。

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

1 个答案:

答案 0 :(得分:6)

您应该使用yyyy,而不是YYYY