«1. Обзор

В этом кратком руководстве мы изучим несколько способов перебора диапазона дат с использованием даты начала и окончания в Java 7, Java 8 и Java 9.

2. Java 7

Начиная с Java 7, мы будем использовать класс java.util.Date для хранения значений даты и java.util.Calendar для увеличения от одной даты к другой.

Давайте рассмотрим пример использования простого цикла while вместе с классами java.util.Date и java.util.Calendar:

void iterateBetweenDatesJava7(Date start, Date end) {
    Date current = start;

    while (current.before(end)) {
        processDate(current);

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(current);
        calendar.add(Calendar.DATE, 1);
        current = calendar.getTime();
    }
}

3. Java 8

Начиная с Java 8, мы можем использовать новый API даты Java 8. Это дает нам самообрабатываемые, неизменяемые, плавные и потокобезопасные объекты. Это также позволяет нам писать более чистый код без необходимости использования вспомогательного класса, такого как java.util.Calendar, для увеличения дат.

Давайте воспользуемся простым циклом for, классом LocalDate и методом plusDays(1) для перемещения вперед по диапазону дат:

void iterateBetweenDatesJava8(LocalDate start, LocalDate end) {
    for (LocalDate date = start; date.isBefore(end); date = date.plusDays(1)) {
        processDate(date);
    }
}

Здесь стоит отметить, что хотя Stream API доступен, начиная с Java 8 итерация между двумя датами с использованием Date API в сочетании с Stream API невозможна до Java 9.

Пожалуйста, ознакомьтесь с этой статьей для более подробного объяснения Java 8 Date API.

4. Java 9+

В Java 9 представлен метод dateUntil, который позволяет нам использовать Stream API для итерации от даты начала до даты окончания.

Давайте обновим код нашего примера, чтобы воспользоваться этой возможностью:

void iterateBetweenDatesJava9(LocalDate start, LocalDate end) {
    start.datesUntil(end).forEach(this::processDate);
}

5. Заключение

Как мы видели в этой быстрой статье, итерация по диапазону дат — простая задача в Java. Это особенно верно при использовании Java 8 и более поздних версий, где мы можем проще обрабатывать даты с помощью Date API.

Обратите внимание, что в Java 7 и более ранних версиях рекомендуется работать как с датой, так и со временем, даже если мы используем только даты.

Однако в Java 8 и более поздних версиях у нас есть преимущество выбора соответствующего класса из API Date, такого как LocalDate, LocalDateTime и других параметров, в соответствии с нашими потребностями.

И, конечно же, начиная с Java 9, мы можем использовать Stream API в сочетании с Date API для итерации потока дат.

Как всегда, фрагменты кода можно найти на GitHub.