繁体   English   中英

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

[英]Getting Date/Time range month wise for last 6 months in Java

我需要为销售设计一份报告。 要求是按月获取过去 6 个月的销售记录,并且报告将在每个月的第一天触发,其中包含过去六个月的数据。 例如 - 如果报告必须在 2020 年 4 月 1 日上午 10 点触发,那么我希望报告的结束日期为 - 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 循环,以便我可以获取每个月的开始日期和结束日期并从数据库查询数据。 请帮助我如何按月拆分日期/时间并使用它。

提前致谢。

我认为这样的事情应该适合您的目的:

    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 中。 任何一种方法都应该没问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM