java - 在 Java 中获取过去 6 个月的日期/时间范围每月明智
问题描述
我需要为销售设计一份报告。要求是按月获取最近 6 个月的销售记录,并且报告将在每个月的第一天触发,其中包含过去六个月的数据。例如 - 如果报告必须在 2020 年 4 月 1 日上午 10:00 触发,那么我希望报告的结束日期为 - 2020 年 3 月 31 日 23:59:59,开始日期为 2019 年 10 月 1 日 00:00:00。在这些开始日期和结束日期之间,我希望明智的日期范围从数据库中获取该月的数据。例如 -
For March - Start Date -- 2020-03-01 00:00:00 End Date -- 2020-03-31 23:59:59
For Feb- Start Date -- 2020-02-01 00:00:00 End Date -- 2020-02-29 23:59:59
等等...所需的日期格式是 - yyyy-MM-dd HH:mm:ss
我计划为此使用 LocalDateTime 但无法弄清楚如何实际实现这一目标。我的代码如下 -
LocalDateTime endDate = LocalDateTime.now();
LocalDateTime startDate = endDate.minusMonths(6);
DateTimeFormatter dateFormatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
for (LocalDateTime date = endDate; date.isAfter(startDate); date = date.minusMonths(1)) {
System.out.println(date.format(dateFormatter3));
}
这是我解决这个问题的基本方法。我打算使用一个 for 循环,以便我可以获取每个月的开始日期和结束日期,并从数据库中查询数据。请帮助我如何按月拆分日期/时间并使用它。
提前致谢。
解决方案
我认为这样的事情应该适合您的目的:
LocalDate startDate = LocalDate.now().withDayOfMonth(1);
ArrayList<LocalDateTime> dateTimes = new ArrayList<>();
for(int i = 1; i < 7; i++) {
LocalDateTime start = LocalDateTime.of(startDate.minusMonths(i), LocalTime.MIDNIGHT);
dateTimes.add(start);
LocalDateTime end = start.plusMonths(1).minusSeconds(1);
dateTimes.add(end);
}
DateTimeFormatter dateFormatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
for(LocalDateTime value : dateTimes) {
System.out.println(value.format(dateFormatter3));
}
ArrayList 将包含前 6 个月的开始和结束日期/时间。从那里,您只需要遍历循环并获取对进行查询。就像是:
for(int i = 0; i < dateTimes.size(); i += 2) {
LocalDateTime start = dateTimes.get(i);
LocalDateTime end = dateTimes.get(i + 1);
//Pass them off to the query
}
您也可以直接在查询中传递从第一个循环中找到的值,而不将它们存储在 ArrayList 中。任何一种方法都应该没问题。
推荐阅读
- gitlab - 无法注释 OpenShift 私有 git 存储库部署的秘密
- laravel - 无法隐藏 yajra 数据表 oracle 中的列
- c++ - 将自定义标记添加到 perf 可以找到和热点显示的 C++ 源代码
- c++ - 在 C++ 中将 2 个 1000 位二进制数相乘
- ios - UITableView 分页 willDisplay 调用一次又一次 swift
- drupal-7 - Drupal 7 - 有机组 - 部门视图
- node.js - 将文件流式传输给用户以在 Node/Express 中下载
- swift - transform.scale 上的 CABasicAnimation 在 X 和 Y 轴上平移 CAShapeLayer
- mysql - MySQL - 如何检查数据的连续性
- javascript - module-deps 无法解析相关的 require()