Получение даты / времени по месяцам за последние 6 месяцев в Java - PullRequest
1 голос
/ 28 февраля 2020

Мне нужно оформить отчет по продажам. Требуется получить последние 6 месяцев отчета о продажах по месяцам, и отчет будет срабатывать в 1-й день каждого месяца, содержащий данные за последние шесть месяцев. Например, если отчет должен сработать 1 апреля 2020 года в 10:00, тогда я хочу, чтобы конечная дата отчета была - 31 марта 2020 г. 23:59:59, а начальная дата - 1 октября 2019 г. 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

и т. Д. ... Желаемый формат даты - гггг-ММ-дд ЧЧ: мм: сс

Я планирую использовать 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));
        }

Это мой базовый c подход к этой проблеме. Я планирую использовать для l oop, чтобы я мог получать даты начала и окончания каждого месяца и запрашивать данные из БД. Пожалуйста, помогите мне, как я могу разделить дату / время по месяцам и использовать их.

Заранее спасибо.

1 Ответ

2 голосов
/ 28 февраля 2020

Нечто подобное должно работать для ваших целей, я думаю:

    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 месяцев. Оттуда вам просто нужно go через l oop и получить пары для ваших запросов. Примерно так:

    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
    }

Вы также можете просто передать найденные значения из первого l oop непосредственно в запрос, не сохраняя их в ArrayList. Любой подход должен быть в порядке.

...