NSDateFormatter 'YYYY' 和 'yyyy' 的区别

今天刷微博的时候看到这个:


立马就想到了BK项目今天feedback回来的bug,运行了大半年好好的都没有啥问题,今天突然间黑屏了,debug后才发现,NSDateFormatter 的时候时间变成2015年了,擦,今天还是2014年啊亲!所以导致create preform的时候出现了问题。

Google了之后才发现是在格式化的时候由YYYY导致引起的,改回yyyy就好了。具体区别:

NSDateFormatter 'YYYY' 和 'yyyy' 的区别_第1张图片


做了个简单的测试,不但认证了上面的那个问,还发现了另外一个问题:

先看一下测试:

NSDateFormatter 'YYYY' 和 'yyyy' 的区别_第2张图片

用[NSDate date]获取当前日期是正确的:2014-12-30 00:42:25 CST (看左边debug框),但打印出来的却是2014-12-29 16:42:25 +0000 足足相差了16 个小时(看右边的debug框),打印出来的好像是美国的时间。经过@“YYYY-MM-dd”格式化当前时间后发现的时间是2015-12-30,相差了一年,这一点确实认证了@"YYYY-MM-dd"是以周计算的。

如下图,2014年的时候是在周日28号的时候出现转换后多一年的情况28,29,30,31都会;2015年是在周日27号之后出现转换多一年的情况;2016年刚好周日是2017年的1号,也就是说以周转换计算的最后一天刚好是下一年的第一天,所以不会出现转换错误的现象;2017年的周日31号又出现了转换多一年的情况。。。。以此便可看出端倪来了,具体还是自己去想吧,只是有一点要特别注意:以后转换日期格式的时候记得还是用@“yyyy-MM-dd”这种格式吧,避免出现这种情况衍生的bug。



参考链接:

http://stackoverflow.com/questions/15133549/difference-between-yyyy-and-yyyy-in-nsdateformatter

http://realmacsoftware.com/blog/working-with-date-and-time


你可能感兴趣的:(ios,nsdateformatter,YYYY和yyyy的区别)