1. Обзор
В этом кратком руководстве мы изучим несколько способов перебора диапазона дат с использованием даты начала и окончания в Java 7, Java 8 и Java 9.
2. Ява 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. Ява 8
Начиная с Java 8, мы можем использовать новый Java 8 Date API . Это дает нам самообрабатываемые, неизменяемые, плавные и потокобезопасные объекты. Это также позволяет нам писать более чистый код без необходимости использования вспомогательного класса , такого как 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. Ява 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 .