Hvordan få alle datoer mellom to datoer?

1. Oversikt

Den nye Time API introdusert i Java 8 gjorde det mulig å behandle dato og tid uten å bruke eksterne biblioteker.

I denne korte opplæringen vil vi se på hvordan å få alle datoer mellom to datoer blir lettere over tid i forskjellige versjoner av Java.

2. Bruke Java 7

I Java 7 bruker du en måte å beregne det på Kalender for eksempel å kjøre en sløyfe og legge til 1 dag i hver iterasjon ved hjelp av add-metoden og Kalender. Dato feltenhet når den sluttdatoen.

Her er koden som demonstrerer det - ved hjelp av Kalender forekomst:

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

3. Bruke Java 8

I Java 8 kan vi nå lage en kontinuerlig uendelig Strøm av datoer og ta bare den aktuelle delen. Dessverre, det er ingen måte å avslutte en uendelig Strøm når et predikat blir matchet - dette er grunnen til at vi må beregne antall dager mellom de to dagene og deretter ganske enkelt grense() de Strøm:

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

Legg merke til hvordan vi først kan få forskjellen på dager mellom to datoer ved hjelp av mellom funksjon - assosiert med DAGER konstant av ChronoUnit oppregning.

Så lager vi en Strøm av heltall som representerer antall dager siden startdatoen. I neste trinn konverterer vi heltallene våre til LocalDate gjenstander som bruker plusDays () API.

Til slutt samler vi alt inn i en listeforekomst.

4. Bruke Java 9

Til slutt bringer Java 9 dedikerte metoder for å beregne dette:

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

Vi kan få datoene mellom to datoer med en enkeltmetodesamtale ved hjelp av dedikert datoer til metode for a LocalDate klasse. De datoerUtill returnerer den sekvensielt bestilte Strøm av datoer som starter fra datoobjektet hvis metode kalles til datoen gitt som metodeargument.

5. Konklusjon

I denne raske artikkelen så vi på hvordan vi kan få alle datoer mellom to datoer ved hjelp av de forskjellige versjonene av Java.

Vi diskuterte hvordan Time API introdusert i Java 8-utgivelsen gjorde det enklere å kjøre operasjoner over datalitteratur og i Java 9, det kan gjøres ved å bare ringe datoer til

Og som alltid kan kodebitene finnes på GitHub.


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