需求是想得到當前日期前一天的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
以前都是看,這次自己嘗試寫,感覺很神奇。