警惕由于使用YYYY-MM-dd引发的一场生产问题
生活随笔
收集整理的這篇文章主要介紹了
警惕由于使用YYYY-MM-dd引发的一场生产问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、問題復現
- 一、問題原因
寫在前面:
我是「境里婆娑」。我還是從前那個少年,沒有一絲絲改變,時間只不過是考驗,種在心中信念絲毫未減,眼前這個少年,還是最初那張臉,面前再多艱險不退卻。
寫博客的目的就是分享給大家一起學習交流,如果您對 Java感興趣,可以關注我,我們一起學習
前言:上周日下午突然收到群里信息說讓查下代碼里是否有在使用YYYY-MM-dd來格式化時間。由于其他組項目有這樣寫導致文件審批不通過而產生了生產問題。
一、問題復現
寫一個測試類來復現這個問題,創建兩個格式化時間一個是正常的yyyy-MM-dd,另一個是YYYY-MM-dd。
public static void main(String[] args) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat sdf1 = new SimpleDateFormat("YYYY-MM-dd");Calendar instance = Calendar.getInstance(); //當前時間為2020-12-30instance.add(Calendar.DATE,-4);System.out.println("yyyy-MM-dd: " + sdf.format(instance.getTime()));System.out.println("YYYY-MM-dd: " + sdf1.format(instance.getTime()));System.out.println("=========我是分割線=========");Calendar instance1 = Calendar.getInstance();instance1.add(Calendar.DATE,-3); //當前時間為2020-12-30System.out.println("yyyy-MM-dd = " + sdf.format(instance1.getTime()));System.out.println("YYYY-MM-dd = " + sdf1.format(instance1.getTime()));}}測試結果為:
yyyy-MM-dd: 2020-12-26 YYYY-MM-dd: 2020-12-26 =========我是分割線========= yyyy-MM-dd = 2020-12-27 YYYY-MM-dd = 2021-12-27- 2020年12月26日(周六),兩個格式解析日期都正確。
- 2020年12月27日(周日),YYYY-MM-dd解析出現問題,年份顯示為2021年
一、問題原因
帶著疑問為什么YYYY-MM-dd格式化2020年12月27日時候,年份會變成2021年呢?
因為JDK6的SimpleDateFormat只有小y,沒有大Y。JDK7開始引入了大Y,表示Week year。
Week year意思是當天所在的周屬于的年份,一周從周日開始,周六結束,只要本周跨年,那么這周就算入下一年
敲黑板:因此我們格式化時候一定要用yyyy-MM-dd這樣的格式,才能避免我們程序出現跨年問題。
總結
以上是生活随笔為你收集整理的警惕由于使用YYYY-MM-dd引发的一场生产问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 详细介绍注解@Configuration
- 下一篇: 详解Java8中流(Stream)的使用