有时候,往往需要统计某个时间区间的销量等问题,这就需要准确的起始时间,获取准确开始时间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