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.