Kako dobiti sve datume između dva datuma?

1. Pregled

Novi Time API uveden u Javi 8 omogućio je obradu datuma i vremena bez korištenja vanjskih knjižnica.

U ovom ćemo kratkom vodiču pogledati kako s vremenom postaju lakši svi datumi između dva datuma u različitim verzijama Jave.

2. Korištenje Jave 7

U Javi 7 jedan je način izračunavanja pomoću Kalendar primjerice, pokretanje petlje i dodavanje 1 dana u svakoj iteraciji pomoću metode add i Kalendar.Datum jedinica polja doseže datum završetka.

Evo koda koji to demonstrira - pomoću Kalendar primjer:

javni statički popis getDatesBetweenUsingJava7 (Datum početkaDat, Datum završetka) {Popis datumaInRange = novi ArrayList (); Kalendar kalendara = novi GregorianCalendar (); calendar.setTime (datum početka); EndCalendar kalendara = novi GregorianCalendar (); endCalendar.setTime (endDate); while (calendar.before (endCalendar)) {Datum rezultat = calendar.getTime (); dateInRange.add (rezultat); calendar.add (Calendar.DATE, 1); } datumi povrataInRange; }

3. Korištenje Jave 8

U Javi 8 sada možemo stvoriti kontinuirani beskonačni Stream datuma i uzmite samo odgovarajući dio. Nažalost, ne postoji način da se završi beskonačno Stream kad se predikat podudara - zato moramo izračunati broj dana između ta dva dana, a zatim jednostavno ograničiti() the Prijenos:

javni statički popis 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 ()); } 

Primijetite kako prvo možemo dobiti razliku u danima između dva datuma pomoću između funkcija - povezana s DANI konstanta od ChronoUnit nabrajanje.

Tada kreiramo Stream cijelih brojeva koji predstavljaju broj dana od datuma početka. U sljedećem koraku pretvaramo naše cijele brojeve u LocalDate objekti koji koriste plusDays () API.

Na kraju, sve sakupljamo u instancu popisa.

4. Korištenje Jave 9

Napokon, Java 9 donosi namjenske metode za izračunavanje ovoga:

javni statički popis getDatesBetweenUsingJava9 (LocalDate startDate, LocalDate endDate) {return startDate.datesUntil (endDate) .collect (Collectors.toList ()); }

Datumove između dva datuma možemo dobiti jednim pozivom metode pomoću namjenskog datumiDo metoda a LocalDate razred. The datumiUnill vraća sekvencijalno poredano Stream datuma koji počinju od objekta datuma čija se metoda poziva do datuma navedenog kao argument metode.

5. Zaključak

U ovom smo kratkom članku pogledali kako možemo dobiti sve datume između dva datuma koristeći različite verzije Jave.

Razgovarali smo o tome kako je Time API predstavljen u izdanju Java 8 olakšao pokretanje operacija nad datumskim literalima, a u Javi 9 to se može učiniti samo pozivanjem datumiDo.

I kao i uvijek, isječke koda možete pronaći na GitHubu.


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