第五坑:YYYY和yyyy

  19年底,一个比较出名,影响比较大的bug,就是这个YYYY和yyyy,DateFormat的格式确实很多,没有认真学习过的人,比较容易犯错,除非你一直copy前人的正确代码,当然,前人写的也有可能有问题。
  我当然也写了这个bug出来,然后当时计划任务判断时间的时候,时间就不相等,导致计划任务没有执行,幸运的是,那个计划任务只是一个推送通知的计划任务,不是很重要,但是,还是得引起足够重视。我去查看原因的时候,看到自己写的是YYYY,当然我不可能一眼就看出猫腻,我看了一下,觉得代码没问题啊,而且之前一直都是好好的,为什么今天出问题了呢,百思不得其解。我就把代码copy出来,测试一下,用今天的日期,发现确实不满足我的判断条件,然后我看转换出来的日期是2020年,有趣!我就想应该是日期格式化的问题,然后去百度搜了一下,发现这已经是一个热门bug了,哈哈哈

DateFormat dfYYYY = new SimpleDateFormat("YYYY-MM-dd");//YYYY
DateFormat dfyyyy = new SimpleDateFormat("yyyy-MM-dd");//yyyy
String date = "2019-12-29";
//先转换为正常的日期,再格式化看差别
System.out.println(dfyyyy.format(dfyyyy.parse(date)));//2019-12-29
System.out.println(dfYYYY.format(dfyyyy.parse(date)));//2020-12-29

SimpleDateFormat各字母代表的含义

字母 日期或时间元素 类型 示例
G Era 标志符 Text AD
y 年份 Number 1996; 96
M 年份中的月份 Text July; Jul; 07
w 年份中的周数 Number 27
W 月份中的周数 Number 2
D 年份中的天数 Number 189
d 月份中的天数 Number 10
F 月份中的星期 Number 2
E 星期中的天数 Text Tuesday; Tue
a Am/pm 标记 Text PM
H 一天中的小时数(0-23) Number 0
k 一天中的小时数(1-24) Number 24
K am/pm 中的小时数(0-11) Number 0
h am/pm 中的小时数(1-12) Number 12
m 小时中的分钟数 Number 30
s 分钟中的秒数 Number 55
S 毫秒数 Number 978
z 时区 General time zone Pacific Standard Time; PST; GMT-08:00
Z 时区 RFC 822 time zone -0800
原文地址:https://www.cnblogs.com/yanghanwen/p/12119045.html