Java日期时间API系列23-----Jdk8中java.time包中的新的日期时间API类,获取准确开始时间00:00:00,获取准确结束时间23:59:59等

  有时候,往往需要统计某个时间区间的销量等问题,这就需要准确的起始时间,获取准确开始时间00:00:00,获取准确结束时间23:59:59。下面增加了一一些方法,获取当天起始时间,昨天起始时间,当前月第一天开始时间,当前月最后一天结束时间,上个月第一天开始时间,上个月最后一天结束时间,某个指定月的起始结束时间等等。其中月份最后一天往往因为月份不同和闰年而不同。

1  下面是方法:

    /**
     * 一天开始时间 00:00:00
     * @return
     */
    public static LocalTime startTimeOfDay(){
        return LocalTime.of(0, 0, 0);
    }
    
    /**
     * 一天开始时间 23:59:59
     * @return
     */
    public static LocalTime endTimeOfDay(){
        return LocalTime.of(23, 59, 59);
    }
    
    /**
     * 昨天起始时间 即:昨天日期+00:00:00
     * @return
     */
    public static Date startTimeOfYesterday(){
        return DateTimeConverterUtil.toDate(LocalDate.now().minusDays(1).atTime(startTimeOfDay()));
    }
    
    /**
     * 昨天结束时间即:昨天日期+23:59:59
     * @return
     */
    public static Date endTimeOfYesterday(){
        return DateTimeConverterUtil.toDate(LocalDate.now().minusDays(1).atTime(endTimeOfDay()));
    }
    
    /**
     * 今天起始时间 即:今天日期+00:00:00
     * @return
     */
    public static Date startTimeOfToday(){
        return DateTimeConverterUtil.toDate(LocalDate.now().atTime(startTimeOfDay()));
    }
    
    /**
     * 今天结束时间即:今天日期+23:59:59
     * @return
     */
    public static Date endTimeOfToday(){
        return DateTimeConverterUtil.toDate(LocalDate.now().atTime(endTimeOfDay()));
    }
    
    /**
     * 上个月第一天起始时间 即:上个月第一天日期+00:00:00
     * @return
     */
    public static Date startTimeOfLastMonth(){
        return DateTimeConverterUtil.toDate(firstDayOfMonth(LocalDate.now().minusMonths(1)).atTime(startTimeOfDay()));
    }
    
    /**
     * 上个月最后一天结束时间 即:上个月最后一天日期+23:59:59
     * @return
     */
    public static Date endTimeOfLastMonth(){
        return DateTimeConverterUtil.toDate(lastDayOfMonth(LocalDate.now().minusMonths(1)).atTime(endTimeOfDay()));
    }
    
    /**
     * 当月第一天起始时间 即:当月第一天日期+00:00:00
     * @return
     */
    public static Date startTimeOfMonth(){
        return DateTimeConverterUtil.toDate(firstDayOfMonth(LocalDate.now()).atTime(startTimeOfDay()));
    }
    
    /**
     * 当月最后一天结束时间即:当月最后一天日期+23:59:59
     * @return
     */
    public static Date endTimeOfMonth(){
        return DateTimeConverterUtil.toDate(lastDayOfMonth(LocalDate.now()).atTime(endTimeOfDay()));
    }
    
    /**
     * 获date起始时间
     * @param date
     * @return
     */
    public static Date startTimeOfDate(Date date){
        return DateTimeConverterUtil.toDate(DateTimeConverterUtil.toLocalDate(date).atTime(startTimeOfDay()));
    }
    
    /**
     * 获取date结束时间
     * @param date
     * @return
     */
    public static Date endTimeOfDate(Date date){
        return DateTimeConverterUtil.toDate(DateTimeConverterUtil.toLocalDate(date).atTime(endTimeOfDay()));
    }

    /**
     * 获取指定年月的第一天起始时间
     * @param year
     * @param month
     * @return
     */
    public static Date startTimeOfSpecialMonth(int year, int month){
        return DateTimeConverterUtil.toDate(LocalDate.of(year, month, 1).atTime(startTimeOfDay()));
    }
    
    /**
     * 获取指定年月的最后一天结束时间
     * @param year
     * @param month
     * @return
     */
    public static Date endTimeOfSpecialMonth(int year, int month){
        return DateTimeConverterUtil.toDate(lastDayOfMonth(LocalDate.of(year, month, 1)).atTime(endTimeOfDay()));
    }

 

2. 测试代码:

    /**
     * 获取准确的起始时间方法测试
     * 比如startTimeOfMonth() 当月起始时间 当月第一天日期+00:00:00
     *       endTimeOfMonth() 当月最后一天日期+23:59:59
     */
    @Test
    public void dateStartTimeAndEndTimeTest(){
        //当天
        System.out.println(DateTimeFormatterUtil.formatToDateTimeStr(DateTimeCalculatorUtil.startTimeOfToday()));
        System.out.println(DateTimeFormatterUtil.formatToDateTimeStr(DateTimeCalculatorUtil.endTimeOfToday()));
        
        //当月
        System.out.println(DateTimeFormatterUtil.formatToDateTimeStr(DateTimeCalculatorUtil.startTimeOfMonth()));
        System.out.println(DateTimeFormatterUtil.formatToDateTimeStr(DateTimeCalculatorUtil.endTimeOfMonth()));
        
        //指定年月
        System.out.println(DateTimeFormatterUtil.formatToDateTimeStr(DateTimeCalculatorUtil.startTimeOfSpecialMonth(2019, 10)));
        System.out.println(DateTimeFormatterUtil.formatToDateTimeStr(DateTimeCalculatorUtil.endTimeOfSpecialMonth(2019, 10)));
    }

 

3. 输出:

2020-02-27 00:00:00
2020-02-27 23:59:59
2020-02-01 00:00:00
2020-02-29 23:59:59
2019-10-01 00:00:00
2019-10-31 23:59:59

 

源代码地址:https://github.com/xkzhangsan/xk-time

posted @ 2020-02-27 16:25  xkzhangsanx  阅读(769)  评论(0编辑  收藏  举报