還記得去年分享過一篇日期格式化使用 YYYY-MM-dd 的潛在問題的文章不?java
歷史又重演了...單元測試
咱們來寫個單元測試,重現一下這個問題。學習
測試邏輯:測試
YYYY-MM-dd
,另外一個是正確用法yyyy-MM-dd
具體代碼以下:spa
public class Tests { @Test public void test() throws Exception { SimpleDateFormat df1 = new SimpleDateFormat("YYYY-MM-dd"); SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd"); Calendar c = Calendar.getInstance(); // 2020年12月26日週六 c.set(Calendar.DATE, 26); System.out.println("YYYY-MM-dd = " + df1.format(c.getTime())); System.out.println("yyyy-MM-dd = " + df2.format(c.getTime())); // 分割線 System.out.println("========================"); // 2020年12月27日 週日 c.add(Calendar.DATE, 1); System.out.println("YYYY-MM-dd = " + df1.format(c.getTime())); System.out.println("yyyy-MM-dd = " + df2.format(c.getTime())); } }
跑一下測試,能夠看到輸出結果以下:code
YYYY-MM-dd = 2020-12-26 yyyy-MM-dd = 2020-12-26 ======================== YYYY-MM-dd = 2021-12-27 yyyy-MM-dd = 2020-12-27
YYYY-MM-dd
出了問題,年份到了2021年本文首發於獨立博客: http://blog.didispace.com/YYYY-MM-dd-2020-again/ ,更多技術乾貨歡迎收藏關注。
爲何YYYY-MM-dd
格式化2020年12月27日的時候,會到2021年呢?orm
由於YYYY是week-based-year,表示:當天所在的周屬於的年份,一週從週日開始,週六結束,只要本週跨年,那麼這周就算入下一年。blog
因此2020年12月27日那天在這種表述方式下就已經到 2021 年了。資源
而當使用yyyy的時候,就仍是 2020 年。get
最後,自查一下你的程序是否有這樣的問題吧!
歡迎關注個人公衆號:程序猿DD,得到獨家整理的免費學習資源助力你的Java學習之路!另每週贈書不停哦~