Hoe alle datums tussen twee datums te krijgen?

1. Overzicht

De nieuwe Time API die in Java 8 werd geïntroduceerd, maakte het mogelijk om datum en tijd te verwerken zonder externe bibliotheken te gebruiken.

In deze korte tutorial zullen we bekijken hoe het verkrijgen van alle datums tussen twee datums in de loop van de tijd gemakkelijker wordt in verschillende versies van Java.

2. Java 7 gebruiken

In Java 7 is een manier om het te berekenen Kalender bijvoorbeeld door een lus uit te voeren en 1 dag in elke iteratie toe te voegen met de methode add en Kalender.Datum veldeenheid bereikt de einddatum.

Hier is de code die het demonstreert - gebruiken Kalender voorbeeld:

openbare statische lijst getDatesBetweenUsingJava7 (Datum startDate, Datum endDate) {List datesInRange = nieuwe ArrayList (); Kalenderkalender = nieuwe GregorianCalendar (); calendar.setTime (startDate); Calendar endCalendar = nieuwe GregorianCalendar (); endCalendar.setTime (endDate); while (calendar.before (endCalendar)) {Datum resultaat = calendar.getTime (); datesInRange.add (resultaat); calendar.add (Calendar.DATE, 1); } return datesInRange; }

3. Java 8 gebruiken

In Java 8 kunnen we nu een continu oneindig creëren Stroom van datums en neem alleen het relevante deel. Helaas, er is geen manier om een ‚Äč‚Äčoneindig te beëindigen Stroom wanneer een predikaat wordt vergeleken - daarom moeten we het aantal dagen tussen die twee dagen berekenen en dan gewoon limiet() de Stroom:

openbare statische lijst getDatesBetweenUsingJava8 (LocalDate startDate, LocalDate endDate) {long numOfDaysBetween = ChronoUnit.DAYS.between (startDate, endDate); retourneer IntStream.iterate (0, i -> i + 1) .limit (numOfDaysBetween) .mapToObj (i -> startDate.plusDays (i)) .collect (Collectors.toList ()); } 

Merk op hoe we eerst het verschil in dagen tussen twee datums kunnen krijgen met behulp van de tussen functie - geassocieerd met DAGEN constante van ChronoUnit opsomming.

Vervolgens maken we een Stroom van gehele getallen die het aantal dagen vertegenwoordigen sinds de begindatum. In de volgende stap converteren we onze gehele getallen naar LocalDate objecten met behulp van de plusDays () API.

Ten slotte verzamelen we alles in een lijstinstantie.

4. Java 9 gebruiken

Ten slotte biedt Java 9 speciale methoden om dit te berekenen:

openbare statische lijst getDatesBetweenUsingJava9 (LocalDate startDate, LocalDate endDate) {return startDate.datesUntil (endDate) .collect (Collectors.toList ()); }

We kunnen de datums tussen twee datums krijgen met een enkele methode-aanroep met behulp van de speciale datesTot methode van een LocalDate klasse. De datesTot geeft de opeenvolgend geordende terug Stroom van datums vanaf het object date waarvan de methode wordt aangeroepen tot de datum die is opgegeven als methode-argument.

5. Conclusie

In dit korte artikel hebben we gekeken hoe we alle datums tussen twee datums kunnen krijgen met behulp van de verschillende versies van Java.

We hebben besproken hoe Time API geïntroduceerd in de Java 8-release het gemakkelijker maakte om bewerkingen uit te voeren over datumletters en in Java 9 kan dit worden gedaan door gewoon te bellen datesTot.

En, zoals altijd, zijn de codefragmenten te vinden op GitHub.