1.先上结论
如果你项目中格式化日期中使用了YYYY
,那么赶紧修改成yyyy
吧!赶紧去,跑步前进,Go!Go!Go!
下面来讲解一下原因!
2.举个例子
//使用YYYY
let format = DateFormatter()
format.dateFormat = "YYYY.MM.dd"
var now = format.string(from: Date()) as String
print("YYYY:\(now)")
//使用yyyy
format.dateFormat = "yyyy.MM.dd"
now = format.string(from: Date()) as String
print("yyyy:\(now)")
你运行上面的代码的时候,可能不会有问题!!!但是我在写这篇文章的时候是2020年12月27日
。看看我的运行结果
看到结果后有几个问题:
- 为什么使用
YYYY
会打印“2021”?也就是说“YYYY”和“yyyy”有什么区别? - 为什么本人刚刚说:
你运行上面代码的时候,可能不会有问题!!!
?也就是说什么时候不一样呢?
2.1 解答:“YYYY”和“yyyy”区别
在苹果开发者文档Data Formatting Guide的Use Format Strings to Specify Custom Formats
中有相关的解释
大概意思:
-
yyyy
使用的是日历年
,我们应该使用日历年
这种方式 -
YYYY
使用的是当前周所在的年份(Week of Year)
- 大部分情况下这两种方式的值是一样的
2.2 解答:什么情况下会不一样
这个我们就得了解一下什么是Week of Year
,当前周所在的年份!
- 如果week(周)没有包含1月1日(没有跨年),那么week就属于
当前所在的年
- 如果week包含了1月1日(跨年了),那么week就属于
新的一年
- 2020年12月27日是周日,而周日是一周的开始。所以如果26日运行这个例子,年份上显示是没有问题的。而从
2020年12月27日 00:00:00
开始显示会有问题!
3.总结
所以说在大部分的情况下YYYY
和yyyy
的值是一样的,只有在跨年的时候会出现问题。
项目中如果涉及到优惠券有效期展示
而且使用了YYYY
格式化年份,你就呵呵...
总结开篇的结论,如果要格式化输出日期中使用到年
,一定要使用yyyy
这种方式!!!