zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    POJ 3041 Asteroids 最小点覆盖 == 二分图的最大匹配
    POJ 3083 Children of the Candy Corn bfs和dfs
    POJ 2049 Finding Nemo bfs 建图很难。。
    POJ 2513 Colored Sticks 字典树、并查集、欧拉通路
    POJ 1013 Counterfeit Dollar 集合上的位运算
    POJ 2965 The Pilots Brothers' refrigerator 位运算枚举
    无聊拿socket写的100以内的加法考试。。。
    POJ 1753 Flip Game
    初学socket,c语言写的简单局域网聊天
    汇编语言 复习 第十一章 标志寄存器
  • 原文地址:https://www.cnblogs.com/xkzhangsanx/p/12372768.html
Copyright © 2011-2022 走看看