Wie bekomme ich alle Daten zwischen zwei Daten?

1. Übersicht

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 werden wir uns ansehen, wie es in verschiedenen Java-Versionen im Laufe der Zeit einfacher wird, alle Daten zwischen zwei Daten abzurufen.

2. Verwenden von Java 7

In Java 7 besteht eine Möglichkeit zur Berechnung darin, die Kalenderinstanz zu verwenden , eine Schleife auszuführen und in jeder Iteration einen Tag hinzuzufügen, indem die Methode add und die Feldeinheit Calendar.Date verwendet werden, um das Enddatum zu erreichen.

Hier ist der Code, der dies demonstriert - mithilfe der Kalenderinstanz :

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. Verwenden von Java 8

In Java 8 können wir jetzt einen kontinuierlichen unendlichen Datenstrom erstellen und nur den relevanten Teil übernehmen. Leider gibt es keine Möglichkeit, einen unendlichen Stream zu beenden, wenn ein Prädikat übereinstimmt. Aus diesem Grund müssen wir die Anzahl der Tage zwischen diesen beiden Tagen berechnen und dann einfach den Stream begrenzen () :

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 der Funktion zwischen ermitteln können, die der DAYS- Konstante der ChronoUnit- Aufzählung zugeordnet ist.

Dann erstellen wir einen Stream von Ganzzahlen, der die Anzahl der Tage seit dem Startdatum darstellt. Im nächsten Schritt konvertieren wir unsere Ganzzahlen mithilfe der plusDays () -API in LocalDate- Objekte .

Schließlich sammeln wir alles in einer Listeninstanz.

4. Verwenden von Java 9

Schließlich bietet Java 9 spezielle Methoden, um dies zu berechnen:

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 dedizierten dateUntil- Methode einer LocalDate- Klasse abrufen . Die datesUntill gibt die sequenziell geordneten Strom von Daten aus dem Tag - Objekt , dessen Methode beginnend an dem Zeitpunkt , als Methode Argument bezeichnet.

5. Schlussfolgerung

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

Wir haben besprochen, wie die in Java 8 eingeführte Zeit-API das Ausführen von Vorgängen über Datumsliterale vereinfacht und in Java 9 durch einfaches Aufrufen von dateUntil durchgeführt werden kann.

Und wie immer finden Sie die Code-Schnipsel auf GitHub.