我需要设计销售报告。要求是按月获取“销售记录”的最后6个月,并且报表将在每个月的第一天触发,其中包含最近6个月的数据。因此,例如-如果报告必须在2020年4月1日上午10:00触发,那么我希望报告的结束日期为-2020年3月31日23:59:59,开始日期为2019年10月1日00:00:00。在这些开始日期和结束日期之间,我希望几个月的日期范围能从DB获得该月的数据。例如-
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中。两种方法都可以。