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.