我已经发现了一个奇怪的行为NSDateFormatter
与LLLL YYYY
格式,它返回一年2015年两个2015年1月1日和2016年1月1日的日期.
我错过了什么或者是格式化程序类中的错误吗?
代码重现:
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月".
你应该使用yyyy
而不是YYYY
,因为YYYY
是不同的东西......
来自文档的更深入的解释:
一个常见的错误是使用YYYY.yyyy指定日历年,而YYYY指定ISO年度日历中使用的年份("年度周").在大多数情况下,yyyy和YYYY会产生相同的数字,但它们可能会有所不同.通常,您应该使用日历年.
你应该使用yyyy
,而不是YYYY
.