SimpleDateFormat時間轉換踩坑


需求是想得到當前日期前一天的00:00:00和23:59:59。結果出來的Date結尾都是00:00:00。原邏輯

 1 public class DateTest {
 2     private static final SimpleDateFormat START_SDF = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
 3     private static final SimpleDateFormat END_SDF = new SimpleDateFormat("yyyy-MM-dd 23:59:59");
 4     public static void main(String[]args)
 5      {
 6         // 獲取前一天
 7         Calendar calendar = Calendar.getInstance(); // 得到日歷
 8         calendar.setTime(new Date());// 把當前時間賦給日歷
 9         calendar.add(Calendar.DAY_OF_MONTH, -1); // 設置為前一天
10         Date yesterday = calendar.getTime(); // 得到前一天的時間
11 
12         try {
13             Date startTime = START_SDF.parse(START_SDF.format(yesterday));
14             Date endTime = END_SDF.parse(END_SDF.format(yesterday));
15             System.out.println("------ startTime:"+startTime);
16             System.out.println("------ endTime:"+endTime);
17         } catch (ParseException e) {
18             e.printStackTrace();
19         }
20      }
21 }

輸出:

------ startTime:Thu Sep 10 00:00:00 CST 2020
------ endTime:Thu Sep 10 00:00:00 CST 2020

跟蹤時發現 END_SDF.parse(END_SDF.format(yesterday)) 出來的時間就是 Thu Sep 10 00:00:00 CST 2020,而 END_SDF.format(yesterday)出來的時間是23:59:59,因此問題就出在這里。源碼我就沒有進一步查了,以后有機會再找出來仔細理解下。

處理辦法:新建一個SimpleDateFormat來轉換轉換出來的時間。

public class DateTest {
    private static final SimpleDateFormat START_SDF = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
    private static final SimpleDateFormat END_SDF = new SimpleDateFormat("yyyy-MM-dd 23:59:59");
    private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    public static void main(String[]args)
     {
        // 獲取前一天
        Calendar calendar = Calendar.getInstance(); // 得到日歷
        calendar.setTime(new Date());// 把當前時間賦給日歷
        calendar.add(Calendar.DAY_OF_MONTH, -1); // 設置為前一天
        Date yesterday = calendar.getTime(); // 得到前一天的時間

        try {
            Date startTime = SDF.parse(START_SDF.format(yesterday));
            Date endTime = SDF.parse(END_SDF.format(yesterday));
            System.out.println("------ startTime:"+startTime);
            System.out.println("------ endTime:"+endTime);
        } catch (ParseException e) {
            e.printStackTrace();
        }
     }
}

輸出:

------ startTime:Thu Sep 10 00:00:00 CST 2020
------ endTime:Thu Sep 10 23:59:59 CST 2020

以前都是看,這次自己嘗試寫,感覺很神奇。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM