在Java中按月获取过去6个月的日期/时间范围



我需要为Sales设计一份报告。要求是按月获取销售记录的最后6个月,该报告将在每月1日触发,其中包含过去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循环,这样我就可以获得每个月的开始日期和结束日期,并从DB中查询数据。请帮助我如何按月份划分日期/时间并使用它。

提前谢谢。

我认为这样的东西应该符合您的目的:

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中。任何一种方法都应该是好的。

最新更新