大家當心啊,YYYY-MM-dd有坑啊,現在才知道

事情來源於一個線上的問題,來看看截圖:


大家當心啊,YYYY-MM-dd有坑啊,現在才知道


看到了吧,時間既然線上2020年12月29日了

翻看代碼,好坑啊,時間格式使用的是YYYY-MM-dd;

自己又測試了一下:

<code>public static void main(String[] args) {        SimpleDateFormat yMd = new SimpleDateFormat("yyyy-MM-dd");        Calendar calendar = Calendar.getInstance();        calendar.set(Calendar.YEAR, 2019);        calendar.set(Calendar.MONTH, 11);        calendar.set(Calendar.DAY_OF_MONTH, 29);        System.out.println("yyyy-MM-dd = " + yMd.format(calendar.getTime()));        SimpleDateFormat YMd = new SimpleDateFormat("YYYY-MM-dd");        Calendar calendar2 = Calendar.getInstance();        calendar2.set(Calendar.YEAR, 2019);        calendar2.set(Calendar.MONTH, 11);        calendar2.set(Calendar.DAY_OF_MONTH, 29);        System.out.println("YYYY-MM-dd = " + YMd.format(calendar2.getTime()));    }————————————————版權聲明:本文為CSDN博主「Rick1993」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。原文鏈接:https://blog.csdn.net/thqtzq/article/details/103826620/<code>

輸出結果大吃一驚:

<code>yyyy-MM-dd = 2019-12-29YYYY-MM-dd = 2020-12-29/<code>

翻閱了一下資料,

YYYY 是 week-based-year,當天所在的周屬於的年份,一週從週日開始,到週六結束;只要本週跨年了,那麼這周就算入下一年。所以打印2020-12-29。

留下資料,希望大家自行排查自己的項目代碼:

參考連接:

https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#patterns
https://nakedsecurity.sophos.com/2019/12/23/serious-security-the-decade-ending-y2k-bug-that-wasnt/


分享到:


相關文章: