還記得去年分享過一篇日期格式化使用 YYYY-MM-dd 的潛在問題的文章不?
歷史又重演了...

事故現場
我們來寫個單元測驗,重現一下這個問題,
測驗邏輯:
- 創建兩個日期格式化,一個是出問題的
YYYY-MM-dd,另一個是正確用法yyyy-MM-dd - 分別去格式化兩個不同的日期:2020年12月26日(周六),2020年12月27日(周日)
具體代碼如下:
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()));
}
}
跑一下測驗,可以看到輸出結果如下:
YYYY-MM-dd = 2020-12-26
yyyy-MM-dd = 2020-12-26
========================
YYYY-MM-dd = 2021-12-27
yyyy-MM-dd = 2020-12-27
- 2020年12月26日(周六),兩種格式化都正確
- 2020年12月27日(周日),
YYYY-MM-dd出了問題,年份到了2021年
本文首發于獨立博客:http://blog.didispace.com/YYYY-MM-dd-2020-again/ ,更多技術干歡訓迎收藏關注,
問題原因
為什么YYYY-MM-dd格式化2020年12月27日的時候,會到2021年呢?
因為YYYY是week-based-year,表示:當天所在的周屬于的年份,一周從周日開始,周六結束,只要本周跨年,那么這周就算入下一年,
所以2020年12月27日那天在這種表述方式下就已經到 2021 年了,
而當使用yyyy的時候,就還是 2020 年,
最后,自查一下你的程式是否有這樣的問題吧!
歡迎關注我的公眾號:程式猿DD,獲得獨家整理的免費學習資源助力你的Java學習之路!另每周贈書不停哦~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/242850.html
標籤:其他
下一篇:重試任務(二)
