Sådan får du alle datoer mellem to datoer?

1. Oversigt

Den nye Time API, der blev introduceret i Java 8, gjorde det muligt at behandle dato og tid uden at bruge eksterne biblioteker.

I denne korte vejledning vil vi se på, hvordan det at få alle datoer mellem to datoer bliver lettere over tid i forskellige versioner af Java.

2. Brug af Java 7

I Java 7 er en måde at beregne det på Kalender eksempel, at køre en sløjfe og tilføje 1 dag i hver iteration ved hjælp af tilføjelsesmetoden og Kalender. Dato felt enhed når den slutdatoen.

Her er koden, der demonstrerer det - ved hjælp af Kalender eksempel:

offentlig statisk liste getDatesBetweenUsingJava7 (Date startDate, Date endDate) {List datesInRange = new ArrayList (); Kalenderkalender = ny gregoriansk kalender (); calendar.setTime (startDate); Kalender endCalendar = ny gregoriansk kalender (); endCalendar.setTime (endDate); while (calendar.before (endCalendar)) {Date result = calendar.getTime (); datesInRange.add (resultat); calendar.add (Calendar.DATE, 1); } returneringsdatoerInRange; }

3. Brug af Java 8

I Java 8 kan vi nu oprette en kontinuerlig uendelig Strøm af datoer og kun tage den relevante del. Desværre, der er ingen måde at afslutte en uendelig Strøm når et prædikat matches - det er derfor, vi skal beregne antallet af dage mellem disse to dage og derefter simpelthen begrænse() det Strøm:

offentlig statisk liste getDatesBetweenUsingJava8 (LocalDate startDate, LocalDate endDate) {long numOfDaysBetween = ChronoUnit.DAYS.between (startDate, endDate); returnere IntStream.iterate (0, i -> i + 1) .limit (numOfDaysBetween) .mapToObj (i -> startDate.plusDays (i)) .collect (Collectors.toList ()); } 

Bemærk, hvordan vi først kan få forskellen på dage mellem to datoer ved hjælp af mellem funktion - forbundet med DAGE konstant af ChronoUnit optælling.

Så opretter vi en Strøm af heltal, der repræsenterer antallet af dage siden startdatoen. I det næste trin konverterer vi vores heltal til LocalDate genstande ved hjælp af plusDays () API.

Endelig samler vi alt i en listeinstans.

4. Brug af Java 9

Endelig bringer Java 9 dedikerede metoder til beregning af dette:

offentlig statisk liste getDatesBetweenUsingJava9 (LocalDate startDate, LocalDate endDate) {return startDate.datesUntil (endDate) .collect (Collectors.toList ()); }

Vi kan få datoerne mellem to datoer med en enkelt metodeopkald ved hjælp af det dedikerede datoer indtil metode til en LocalDate klasse. Det datoer indtil returnerer den rækkefølge, der er ordnet Strøm af datoer startende fra det datoobjekt, hvis metode kaldes til den dato, der er angivet som metodeargument.

5. Konklusion

I denne hurtige artikel så vi på, hvordan vi kan få alle datoer mellem to datoer ved hjælp af de forskellige versioner af Java.

Vi diskuterede, hvordan Time API introduceret i Java 8-udgivelse gjorde det lettere at køre operationer over dato-bogstaver og i Java 9, det kan gøres ved bare at ringe datoer indtil

Og som altid kan kodestykkerne findes på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found