Wie bekomme ich alle Termine zwischen zwei Terminen?

Wie bekomme ich alle Daten zwischen zwei Daten?

1. Überblick

Die in Java 8 eingeführte neue Zeit-API ermöglichte die Verarbeitung von Datum und Uhrzeit ohne Verwendung externer Bibliotheken.

In diesem kurzen Tutorial sehen wir uns an, wie das Abrufen aller Daten zwischen zwei Daten in verschiedenen Java-Versionen mit der Zeit einfacher wird.

2. Java 7 verwenden

In Java 7 besteht eine Möglichkeit zur Berechnung darin, die Instanz vonCalendarzu verwenden, eine Schleife auszuführen und in jeder Iteration 1 Tag mit der Methode add und der FeldeinheitCalendar.Datehinzuzufügen, bis das Enddatum erreicht ist.

Hier ist der Code, der dies demonstriert - unter Verwendung der Instanz vonCalendar:

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 verwenden 8

In Java 8 können wir jetzt ein kontinuierliches unendlichesStream von Daten erstellen und nur den relevanten Teil übernehmen. Leiderthere is no way of terminating an infinite Stream when a predicate gets matched - deshalb müssen wir die Anzahl der Tage zwischen diesen beiden Tagen berechnen und dann einfachlimit() dieStream:

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());
}

Beachten Sie, wie wir zuerst die Differenz der Tage zwischen zwei Daten mithilfe derbetween-Funktion ermitteln können, die derDAYS-Konstante derChronoUnit-Zählung zugeordnet ist.

Dann erstellen wirStream von ganzen Zahlen, die die Anzahl der Tage seit dem Startdatum darstellen. Im nächsten Schritt konvertieren wir unsere Ganzzahlen mithilfe derplusDays()-API inLocalDate Objekte.

Schließlich sammeln wir alles in einer Listeninstanz.

4. Verwenden von Java 9

Schließlich bringt Java 9 dedizierte Methoden zur Berechnung dieser:

public static List getDatesBetweenUsingJava9(
  LocalDate startDate, LocalDate endDate) {

    return startDate.datesUntil(endDate)
      .collect(Collectors.toList());
}

Wir können die Daten zwischen zwei Daten mit einem einzigen Methodenaufruf mithilfe der dediziertendatesUntil-Methode einerLocalDate-Klasse abrufen. datesUntill gibt die sequentiell geordnetenStream von Daten zurück, beginnend mit dem Datumsobjekt, dessen Methode bis zu dem als Methodenargument angegebenen Datum aufgerufen wird.

5. Fazit

In diesem kurzen Artikel haben wir uns angesehen, wie wir mit den verschiedenen Java-Versionen alle Daten zwischen zwei Daten ermitteln können.

Wir haben besprochen, wie die in Java 8 eingeführte Time API das Ausführen von Operationen über Datumsliterale vereinfacht und in Java 9 durch einfaches Aufrufen vondatesUntil. durchgeführt werden kann

Und wie immer können die Codefragmenteover on GitHub gefunden werden.