Kontrola, či sú dva dátumy Java v ten istý deň

1. Prehľad

V tomto rýchlom návode Dozvieme sa niekoľko rôznych spôsobov, ako skontrolovať, či sú dva java.util.Date objekty majú rovnaký deň.

Začneme zvážením riešení využívajúcich jadro Java - konkrétne funkcií Java 8 - predtým, ako sa pozrieme na niekoľko alternatív pred vydaním Java 8.

Na záver sa pozrieme tiež na niektoré externé knižnice - Apache Commons Lang, Joda-Time a Date4J.

2. Jadro Java

Trieda Dátum predstavuje konkrétny okamih v čase s presnosťou na milisekundy. Zistiť, či dva Dátum objekty obsahujú ten istý deň, musíme skontrolovať, či je rok-mesiac-deň rovnaký pre oba objekty a vyradiť časový aspekt.

2.1. Použitím LocalDate

S novým rozhraním API pre dátum a čas v prostredí Java 8 môžeme používať LocalDate objekt. Toto je nemenný objekt predstavujúci dátum bez času.

Pozrime sa, ako môžeme skontrolovať, či sú dve Dátum objekty majú túto triedu rovnaký deň:

public static boolean isSameDay (Date date1, Date date2) {LocalDate localDate1 = date1.toInstant () .atZone (ZoneId.systemDefault ()) .toLocalDate (); LocalDate localDate2 = date2.toInstant () .atZone (ZoneId.systemDefault ()) .toLocalDate (); return localDate1.isEqual (localDate2); }

V tomto príklade premenili sme obe Dátum predmety do LocalDate pomocou predvoleného časového pásma. Po prevedení stačí skontrolujte, či LocalDate objekty sú rovnaké pomocou isEqual metóda.

Následne pomocou tohto prístupu budeme schopní určiť, či sú tieto dva Dátum objekty obsahujú ten istý deň.

2.2. Použitím Okamžité

V príklade vyššie sme použili Okamžité ako sprostredkujúci objekt pri premene Dátum predmety do LocalDate predmety. Okamžité, predstavený v prostredí Java 8, predstavuje konkrétny časový bod.

Môžeme priamo skrátiť Okamžité objekty do jednotky DAYS, ktorá nastaví hodnoty časového poľa na nulu, a potom ich môžeme porovnať:

public static boolean isSameDayUsingInstant (Date date1, Date date2) {Instant instant1 = date1.toInstant () .truncatedTo (ChronoUnit.DAYS); Okamžitý instant2 = date2.toInstant () .truncatedTo (ChronoUnit.DAYS); návrat instant1.equals (instant2); }

2.3. Použitím SimpleDateFormat

Od raných verzií Java sme schopní používať SimpleDateFormat trieda na prevod medzi Dátum a String objektové reprezentácie. Táto trieda je dodávaná s podporou konverzií pomocou mnohých vzorov. V našom prípade použijeme vzor „yyyyMMdd“.

Pomocou toho naformátujeme Dátum, previesť na a String objekt a potom ich porovnajte pomocou štandardu rovná sa metóda:

public static boolean isSameDay (Date date1, Date date2) {SimpleDateFormat fmt = new SimpleDateFormat ("yyyyMMdd"); return fmt.format (date1) .equals (fmt.format (date2)); }

2.4. Použitím Kalendár

The Kalendár trieda poskytuje metódy na získanie hodnôt rôznych jednotiek dátumu a času pre konkrétny okamih.

Najskôr musíme vytvoriť a Kalendár inštanciu a nastavte Kalendár čas objektov pomocou každého z poskytnutých dátumov. Potom môžeme dopytovať a jednotlivo porovnajte atribúty Rok-Mesiac-Deň zistiť, či Dátum objekty majú rovnaký deň:

public static boolean isSameDay (Date date1, Date date2) {Calendar calendar1 = Calendar.getInstance (); calendar1.setTime (date1); Calendar calendar2 = Calendar.getInstance (); calendar2.setTime (date2); vrátiť calendar1.get (Calendar.YEAR) == calendar2.get (Calendar.YEAR) && calendar1.get (Calendar.MONTH) == calendar2.get (Calendar.MONTH) && calendar1.get (Calendar.DAY_OF_MONTH) == calendar2 .get (Calendar.DAY_OF_MONTH); }

3. Externé knižnice

Teraz, keď dobre rozumieme tomu, ako porovnávať Dátum objekty využívajúce nové a staré API ponúkané jadrom Java, poďme sa pozrieť na niektoré externé knižnice.

3.1. Apache Commons Lang DateUtils

The DateUtils Táto trieda poskytuje mnoho užitočných obslužných programov, ktoré uľahčujú prácu s týmto odkazom Kalendár a Dátum predmety.

Artefakt Apache Commons Lang je k dispozícii na serveri Maven Central:

 org.apache.commons commons-lang3 3.9 

Potom môžeme metódu jednoducho použiť isSameDay od DateUtils:

DateUtils.isSameDay (dátum1, dátum2);

3.2. Knižnica Joda-Time

Alternatíva k jadru Java Dátum a Čas knižnica je Joda-Time. Táto široko používaná knižnica slúži ako vynikajúca náhrada pri práci s dátumom a časom.

Artefakt nájdete na Maven Central:

 joda-time joda-time 2.10 

V tejto knižnici org.joda.time.LocalDate predstavuje dátum bez času. Preto môžeme zostrojiť LocalDate predmety z java.util.Date objekty a potom ich porovnajte:

public static boolean isSameDay (Date date1, Date date2) {org.joda.time.LocalDate localDate1 = new org.joda.time.LocalDate (date1); org.joda.time.LocalDate localDate2 = nový org.joda.time.LocalDate (date2); return localDate1.equals (localDate2); }

3.3. Knižnica Date4J

Date4j tiež poskytuje priamu a jednoduchú implementáciu, ktorú môžeme použiť.

Rovnako je k dispozícii aj v Maven Central:

 com.darwinsys hirondelle-date4j 1.5.1 

Pomocou tejto knižnice musíme postaviť Dátum Čas objekt z a java.util.Date objekt. Potom môžeme jednoducho Použi isSameDayAs metóda:

public static boolean isSameDay (Date date1, Date date2) {DateTime dateObject1 = DateTime.forInstant (date1.getTime (), TimeZone.getDefault ()); DateTime dateObject2 = DateTime.forInstant (date2.getTime (), TimeZone.getDefault ()); návrat dateObject1.isSameDayAs (dateObject2); }

4. Záver

V tomto rýchlom návode sme preskúmali niekoľko spôsobov kontroly, či sú dva java.util.Date objekty obsahujú ten istý deň.

Celý zdrojový kód článku je ako vždy k dispozícii na GitHub.


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