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.