添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
学习笔记
  • 8 漫行随拍
  • 4 赏味人间
  • 1 优惠推荐
  • 永恒数一
  • 0 网络转载
  • 我们在用 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:00
    • LocalTime.MAX :支持的最大本地时间:23:59:59.999999999