我发现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月”。
答案 0 :(得分:7)
您应该使用yyyy
代替YYYY
,因为YYYY
是不同的......
来自the docs的更深入解释:
常见的错误是使用 YYYY。 yyyy指定日历年,而YYYY指定年份 (“年度周”),用于ISO年 - 周历。多数情况 案例,yyyy和YYYY产生相同的数字,但它们可能是 不同。通常,您应该使用日历年。
答案 1 :(得分:5)
您应该使用yyyy
,而不是YYYY
。