Итерация по диапазону дат в Java

Итерация по ряду дат в Java

1. обзор

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

2. Java 7

Начиная с Java 7,we’ll use the class java.util.Date for holding the date values and java.util.Calendar for incrementing from one date to the next.

Давайте посмотрим на пример, использующий простой цикл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,we can use the new Java 8 Date API. Это дает нам самообслуживаемые, неизменные, беглые и потокобезопасные объекты. Это такжеallows us to write cleaner code without the need for a helper class как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);
    }
}

Здесь стоит отметить, чтоalthough the Stream API is available beginning in Java 8, iterating between two dates using the Date API in conjunction with the Stream API isn’t possible until Java 9.

Пожалуйста, проверьтеthis article для более подробного объяснения Java 8 Date API.

4. Java 9+

Java 9 introduces the method datesUntil, which lets us use the Stream API для итерации от даты начала до даты окончания.

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

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

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

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

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

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

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

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