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