需求是想得到当前日期前一天的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
以前都是看,这次自己尝试写,感觉很神奇。