Annak ellenőrzése, hogy két Java dátum ugyanazon a napon van-e

1. Áttekintés

Ebben a gyors bemutatóban megtudhatunk többféle módot annak ellenőrzésére, hogy kettő van-e java.util.Dátum tárgyaknak ugyanaz a napjuk.

Kezdjük azzal, hogy fontolóra vesszük az alapvető Java - nevezetesen a Java 8 - funkciókat, mielőtt megvizsgálnánk néhány, a Java 8 előtti alternatívát.

Befejezésül néhány külső könyvtárat is megvizsgálunk - Apache Commons Lang, Joda-Time és Date4J.

2. Core Java

Osztály Dátum egy adott pillanatot képvisel, milliszekundum pontossággal. Hogy megtudja, kettő Dátum az objektumok ugyanazt a napot tartalmazzák, ellenőriznünk kell, hogy az év-hónap-nap megegyezik-e mindkét objektum esetében, és el kell vetni az idő szempontot.

2.1. Használata LocalDate

A Java 8 új Date-Time API-jával használhatjuk a LocalDate tárgy. Ez egy megváltoztathatatlan objektum, amely idõ nélküli dátumot képvisel.

Lássuk, hogyan ellenőrizhetjük, hogy kettő van-e Dátum az objektumok ugyanazon a napon vannak ezzel az osztályval:

public static boolean isSameDay (dátum dátum1, dátum dátum2) {LocalDate localDate1 = dátum1.toInstant () .atZone (ZoneId.systemDefault ()) .toLocalDate (); LocalDate localDate2 = date2.toInstant () .atZone (ZoneId.systemDefault ()) .toLocalDate (); return localDate1.isEqual (localDate2); }

Ebben a példában átalakítottuk mind a Dátum kifogásolja LocalDate az alapértelmezett időzóna használatával. Miután megtértünk, csak meg kell ellenőrizze, hogy a LocalDate objektumok egyenlőek a egyenlő módszer.

Következésképpen ennek a megközelítésnek a használatával meg tudjuk állapítani, hogy a kettő Dátum az objektumok ugyanazt a napot tartalmazzák.

2.2. Használata Azonnali

A fenti példában azt használtuk Azonnali köztes objektumként az átalakításkor Dátum kifogásolja LocalDate tárgyakat. Azonnali, a Java 8-ban bevezetve, egy meghatározott időpontot képvisel.

Közvetlenül tudunk csonka a Azonnali kifogásolja a DAYS egységet, amely nullára állítja az időmező értékeit, majd összehasonlíthatjuk őket:

public static boolean isSameDayUsingInstant (dátum dátum1, dátum dátum2) {azonnali instant1 = dátum1.toInstant () .truncatedTo (ChronoUnit.DAYS); Azonnali instant2 = date2.toInstant () .truncatedTo (ChronoUnit.DAYS); return instant1.equals (instant2); }

2.3. Használata SimpleDateFormat

A Java korai verziói óta képesek vagyunk használni a SimpleDateFormat osztály közötti átváltáshoz Dátum és Húr tárgyábrázolások. Ez az osztály támogatja a sok mintát használó átalakítást. Esetünkben az „ééééHHdd” mintát fogjuk használni.

Ennek használatával formázzuk a Dátum, konvertálja a-ra Húr objektumot, majd hasonlítsa össze őket a szabvány segítségével egyenlő módszer:

public static boolean isSameDay (dátum dátum1, dátum dátum2) {SimpleDateFormat fmt = új SimpleDateFormat ("ééééHHdd"); return fmt.formátum (dátum1) .egyenlő (fmt.formátum (dátum2)); }

2.4. Használata Naptár

A Naptár osztály módszereket kínál a különböző dátum-idő egységek értékeinek lekérésére egy adott pillanatra.

Először létre kell hoznunk a Naptár példány és állítsa be a Naptár objektumok ideje a megadott dátumok felhasználásával. Ezután lekérdezhetjük és hasonlítsa össze az Év-Hónap-Nap attribútumokat egyenként kitalálni, hogy a Dátum tárgyak ugyanaz a nap:

public static boolean isSameDay (dátum dátum1, dátum dátum2) {Naptár naptár1 = Naptár.getInstance (); calendar1.setTime (dátum1); Naptár naptár2 = Naptár.getInstance (); calendar2.setTime (dátum2); return calendar1.get (Calendar.YEAR) == calendar2.get (Calendar.YEAR) && calendar1.get (Calendar.MONTH) == calendar2.get (Calendar.MONTH) && calendar1.get (Calendar.DAY_OF_MONTH) == calendar2 .get (Naptár.DAY_OF_MONTH); }

3. Külső könyvtárak

Most, hogy jól megértettük az összehasonlítás módját Dátum objektumokat, amelyek a Java alapja által kínált új és régi API-kat használják, vessünk egy pillantást néhány külső könyvtárra.

3.1. Apache Commons Lang DateUtils

A DateUtils osztály számos hasznos segédprogramot kínál, amelyek megkönnyítik a régi munkával való munkát Naptár és Dátum tárgyakat.

Az Apache Commons Lang műtárgy elérhető a Maven Central-tól:

 org.apache.commons commons-lang3 3.9 

Akkor egyszerűen használhatjuk a módszert isSameDay tól től DateUtils:

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

3.2. Joda-Time könyvtár

A Java alapvető alternatívája Dátum és Idő könyvtár Joda-Time. Ez a széles körben használt könyvtár kiváló helyettesítőt jelent a Dátum és Idő használatakor.

A műtárgy megtalálható a Maven Central oldalon:

 joda-idő joda-idő 2.10 

Ebben a könyvtárban org.joda.time.LocalDate idő nélküli dátumot jelent. Ezért megkonstruálhatjuk a LocalDate tárgyak a java.util.Dátum objektumokat, majd hasonlítsa össze őket:

public static boolean isSameDay (dátum dátum1, dátum dátum2) {org.joda.time.LocalDate localDate1 = új org.joda.time.LocalDate (dátum1); org.joda.time.LocalDate localDate2 = új org.joda.time.LocalDate (dátum2); return localDate1.equals (localDate2); }

3.3. Date4J könyvtár

A Date4j egy egyszerű és egyszerű megvalósítást is biztosít, amelyet felhasználhatunk.

Hasonlóképpen a Maven Central-tól is elérhető:

 com.darwinsys hirondelle-date4j 1.5.1 

A könyvtár használatával meg kell tennünk konstruálja a Dátum idő objektum a java.util.Dátum tárgy. Akkor egyszerűen használja a isSameDayAs módszer:

nyilvános statikus logikai érték isSameDay (dátum dátum1, dátum dátum2) {dátum és idő dátum objektum1 = dátum és idő. forInstant (dátum1.getTime (), időzóna.getDefault ()); DateTime dateObject2 = DateTime.forInstant (date2.getTime (), TimeZone.getDefault ()); return dateObject1.isSameDayAs (dateObject2); }

4. Következtetés

Ebben a gyors bemutatóban számos módszert tártunk fel annak ellenőrzésére, hogy kettő van-e java.util.Dátum az objektumok ugyanazt a napot tartalmazzák.

Mint mindig, a cikk teljes forráskódja elérhető a GitHubon.