Ako získať všetky dátumy medzi dvoma dátumami?

1. Prehľad

Nové rozhranie Time API zavedené v prostredí Java 8 umožnilo spracovať dátum a čas bez použitia externých knižníc.

V tomto krátkom tutoriáli sa pozrieme na to, ako sa v rôznych verziách Java časom uľahčujú postupné zlepšovanie všetkých dátumov medzi dvoma dátumami.

2. Používanie Java 7

V prostredí Java 7 je jedným zo spôsobov, ako to vypočítať, použitie Kalendár napríklad spustenie cyklu a pridanie 1 dňa v každej iterácii pomocou metódy add a Calendar.Date poľná jednotka dosiahne dátum ukončenia.

Tu je kód demonštrujúci to - použitie Kalendár inštancia:

public static List getDatesB BetweenUsingJava7 (Date startDate, Date endDate) {List datesInRange = new ArrayList (); Kalendár kalendár = nový GregorianCalendar (); calendar.setTime (startDate); Calendar endCalendar = new GregorianCalendar (); endCalendar.setTime (endDate); while (calendar.before (endCalendar)) {Date result = calendar.getTime (); datesInRange.add (výsledok); calendar.add (Calendar.DATE, 1); } dátumy návratuInRange; }

3. Používanie Java 8

V prostredí Java 8 môžeme teraz vytvoriť spojitý nekonečno Prúd dátumov a vezmite iba príslušnú časť. Bohužiaľ neexistuje spôsob ukončenia nekonečna Prúd keď sa predikát spáruje - preto musíme vypočítať počet dní medzi týmito dvoma dňami a potom jednoducho limit () the Prúd:

public static List getDatesB BetweenUsingJava8 (LocalDate startDate, LocalDate endDate) {long numOfDaysB Between = ChronoUnit.DAYS.b Between (startDate, endDate); návrat IntStream.iterate (0, i -> i + 1) .limit (numOfDaysB Between) .mapToObj (i -> startDate.plusDays (i)) .collect (Collectors.toList ()); } 

Všimnite si, ako najskôr môžeme pomocou rozdielu dní získať rozdiel dní medzi dvoma dátumami medzi funkcia - spojená s DNI konštanta z ChronoUnit vyčíslenie.

Potom vytvoríme a Prúd celých čísel predstavujúcich počet dní od dátumu začatia. V ďalšom kroku prevedieme celé čísla na LocalDate objekty pomocou plusDays () API.

Nakoniec všetko zhromaždíme do inštancie zoznamu.

4. Používanie Java 9

A konečne, Java 9 prináša vyhradené metódy pre výpočet tohto:

public static List getDatesB BetweenUsingJava9 (LocalDate startDate, LocalDate endDate) {return startDate.datesUntil (endDate) .collect (Collectors.toList ()); }

Môžeme získať dátumy medzi dvoma dátumami pomocou jedného volania metódy pomocou vyhradeného dátumyDo metóda a LocalDate trieda. The dátumy Do vráti sekvenčne zoradené Prúd dátumov začínajúcich od objektu dátumu, ktorého metóda sa volá, k dátumu uvedenému ako argument metódy.

5. Záver

V tomto rýchlom článku sme sa pozreli na to, ako môžeme pomocou rôznych verzií Java získať všetky dátumy medzi dvoma dátumami.

Diskutovali sme o tom, ako rozhranie Time API zavedené vo vydaní Java 8 uľahčilo spustenie operácií nad dátumovými literálmi a v prostredí Java 9 to možno urobiť iba zavolaním dátumyDo.

A ako vždy, útržky kódu nájdete na GitHub.


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