Рубрики
Без рубрики

Как получить Все Даты Между Двумя Датами?

Узнайте, как получить все даты между двумя датами с помощью Java 7, Java 8 и Java 9.

Автор оригинала: baeldung.

1. Обзор

Новый API времени, представленный в Java 8, позволил обрабатывать дату и время без использования внешних библиотек.

В этом коротком уроке мы рассмотрим, как получение всех дат между двумя датами становится проще с течением времени в разных версиях Java.

2. Использование Java 7

В Java 7 одним из способов его вычисления является использование экземпляра Calendar , запуск цикла и добавление 1 дня в каждой итерации с помощью метода add и Calendar.Дата единица измерения поля она достигает конечной даты.

Вот код, демонстрирующий это – использование Calendar экземпляра:

public static List getDatesBetweenUsingJava7(
  Date startDate, Date endDate) {
    List datesInRange = new ArrayList<>();
    Calendar calendar = new GregorianCalendar();
    calendar.setTime(startDate);
    
    Calendar endCalendar = new GregorianCalendar();
    endCalendar.setTime(endDate);

    while (calendar.before(endCalendar)) {
        Date result = calendar.getTime();
        datesInRange.add(result);
        calendar.add(Calendar.DATE, 1);
    }
    return datesInRange;
}

3. Использование Java 8

В Java 8 теперь мы можем создавать непрерывный бесконечный Поток дат и принимать только соответствующую часть. К сожалению, нет способа завершить бесконечный поток при совпадении предиката – вот почему нам нужно вычислить количество дней между этими двумя днями, а затем просто limit() поток :

public static List getDatesBetweenUsingJava8(
  LocalDate startDate, LocalDate endDate) { 
 
    long numOfDaysBetween = ChronoUnit.DAYS.between(startDate, endDate); 
    return IntStream.iterate(0, i -> i + 1)
      .limit(numOfDaysBetween)
      .mapToObj(i -> startDate.plusDays(i))
      .collect(Collectors.toList()); 
}

Обратите внимание, как, во – первых, мы можем получить разницу в днях между двумя датами, используя функцию between , связанную с константой DAYS перечисления ChronoUnit .

Затем мы создаем Поток целых чисел, представляющих количество дней с даты начала. На следующем шаге мы преобразуем ваши целые числа в Локальные данные объекты с помощью plus Days() API.

Наконец, мы собираем все в экземпляр списка.

4. Использование Java 9

Наконец, Java 9 предлагает специальные методы для расчета этого:

public static List getDatesBetweenUsingJava9(
  LocalDate startDate, LocalDate endDate) {
 
    return startDate.datesUntil(endDate)
      .collect(Collectors.toList());
}

Мы можем получить даты между двумя датами с помощью одного вызова метода, используя выделенный метод dates Until класса LocalDate|/. dates until возвращает последовательно упорядоченный Поток дат, начиная с объекта date, метод которого вызывается, до даты, заданной в качестве аргумента метода.

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

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

Мы обсудили, как API времени, представленный в выпуске Java 8, облегчил выполнение операций над литералами даты, а в Java 9 это можно сделать, просто вызвав datesUntil.

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