我们在用 Java
开发后台的时候,有时需要对数据进行特定时间段统计汇总,比如需要筛选上一季度的数据。那么如何获取上一季度起止日期和时间呢?从 Java8
开始实现更简单,具体如下:
源码:
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDate nowDate = LocalDate.ofInstant(Instant.now(), ZoneId.systemDefault());
// 当前月份减去 3 个月,即落在上个季度中
LocalDate lastQuarterDate = nowDate.minusMonths(3);
// 通过 firstMonthOfQuarter 获取所在季度第一个月
Month firstMonthOfQuarter = lastQuarterDate.getMonth().firstMonthOfQuarter();
// 所在季度第一个月加上 2,即为所在季度最后一个月
Month endMonthOfQuarter = Month.of(firstMonthOfQuarter.getValue() + 2);
// 获得上面得到的季度第一个月的第一天
LocalDate beginDate = LocalDate.of(lastQuarterDate.getYear(), firstMonthOfQuarter, 1);
// 获得上面得到的季度最后一个月的最后一天
LocalDate endDate = LocalDate.of(lastQuarterDate.getYear(), endMonthOfQuarter, endMonthOfQuarter.length(beginDate.isLeapYear()));
// 获取季度开始时间
LocalDateTime beginTime = LocalDateTime.of(beginDate, LocalTime.MIN);
// 获取季度结束时间
LocalDateTime endTime = LocalDateTime.of(endDate, LocalTime.MAX);
`System.out.println("上个季度开始日期:" + beginDate);
System.out.println("上个季度结束日期:" + endDate);
System.out.println("上个季度开始时间:" + beginTime.format(dateTimeFormatter));
System.out.println("上个季度结束时间:" + endTime.format(dateTimeFormatter));`
运行结果输出:
上个季度开始日期:2022-01-01
上个季度结束日期:2022-03-31
上个季度开始时间:2022-01-01 00:00:00
上个季度结束时间:2022-03-31 23:59:59
知识点:
LocalDate
中的boolean isLeapYear()
:判断是否闰年Month
中的int length(boolean leapYear)
:获取月份天数LocalTime.MIN
:支持的最小本地时间:00:00LocalTime.MAX
:支持的最大本地时间:23:59:59.999999999