問題描述
在跨年期間,如果在日期格式化的時候使用 YYYY 來格式化年份,則可能會出現(xiàn)下圖所示的bug:

BUG
根本原因
YYYY 在官方文檔中的解釋是 week-based-year,表示當(dāng)天所在的周屬于的年份,一周從周日開始,周六結(jié)束,只要本周跨年,那么這周就算入下一年。所以2019年12月31日那天在這種表述方式下就已經(jīng)是 2020 年了。而當(dāng)使用 yyyy 或者 uuuu 的時候,就還是 2019 年。
總結(jié)
u year
y year-of-era
Y week-based-year,表示當(dāng)天所在的周屬于的年份
u 與 y 在公元后的年份表示沒有區(qū)別,在公元前的年份表示有正負號的差別。所以建議平時時期格式化的時候使用 yyyy-MM-dd 或者 uuuu-MM-dd。
參考資料
文章標題:Java 中 YYYY-MM-dd 在跨年時的致命問題
文章作者:Ciel Ni
文章鏈接:http://www.cielni.com/2020/01/10/java-date-format/
有問題或建議歡迎與我聯(lián)系討論,轉(zhuǎn)載或引用希望標明出處,感激不盡!