NSDateFormater - 2015年和2016年同年返回

时间:2016-01-03 16:18:32

标签: ios objective-c

我发现NSDateFormatter采用LLLL YYYY格式的奇怪行为,其中 2015-01-01 返回年份 2015 2016-01-01 日期。

我是否遗漏了某些内容,或者它是格式化程序类中的错误?

重现的代码:

NSDateFormatter *formatter = [NSDateFormatter new];
formatter.dateFormat = @"LLLL YYYY";

NSDate *d1 = [NSDate dateWithTimeIntervalSince1970:1420070400]; // 2015-01-01T00:00:00Z
NSDate *d2 = [NSDate dateWithTimeIntervalSince1970:1451606400]; // 2016-01-01T00:00:00Z

NSLog(@"%@ => %@", d1, [formatter stringFromDate:d1]); // 2015-01-01 00:00:00 +0000 => January 2015
NSLog(@"%@ => %@", d2, [formatter stringFromDate:d2]); // 2016-01-01 00:00:00 +0000 => January 2015

这两个案例都打印出“2015年1月”,但在第二种情况下,我希望“2016年1月”。

2 个答案:

答案 0 :(得分:7)

您应该使用yyyy代替YYYY,因为YYYY是不同的......

来自the docs的更深入解释:

  

常见的错误是使用   YYYY。 yyyy指定日历年,而YYYY指定年份   (“年度周”),用于ISO年 - 周历。多数情况   案例,yyyy和YYYY产生相同的数字,但它们可能是   不同。通常,您应该使用日历年。

答案 1 :(得分:5)

您应该使用yyyy,而不是YYYY