Provjeravanje jesu li dva Java datuma istog dana

1. Pregled

U ovom brzom vodiču, naučit ćemo o nekoliko različitih načina kako provjeriti jesu li dva java.util.Datum predmeti imaju isti dan.

Za početak ćemo razmotriti rješenja koja koriste jezgru Java - naime, značajke Java 8 - prije nego što ćemo razmotriti nekoliko alternativa prije Java 8.

Za kraj ćemo pogledati i neke vanjske knjižnice - Apache Commons Lang, Joda-Time i Date4J.

2. Jezgra Java

Razred Datum predstavlja određeni trenutak u vremenu, s milisekundnom preciznošću. Da bih saznao jesu li dvije Datum predmeti sadrže isti dan, moramo provjeriti je li godina-mjesec-dan jednak za oba objekta i odbaciti vremenski aspekt.

2.1. Koristeći LocalDate

S novim API-jem datuma i vremena Java 8, možemo koristiti LocalDate objekt. Ovo je nepromjenjivi objekt koji predstavlja datum bez vremena.

Pogledajmo kako možemo provjeriti jesu li dvije Datum objekti imaju isti dan koristeći ovu klasu:

javna statička logička vrijednost jeSameDay (Datum datum1, Datum datum2) {LocalDate localDate1 = date1.toInstant () .atZone (ZoneId.systemDefault ()) .toLocalDate (); LocalDate localDate2 = date2.toInstant () .atZone (ZoneId.systemDefault ()) .toLocalDate (); vrati localDate1.isEqual (localDate2); }

U ovom primjeru, pretvorili smo oba Datum prigovara se LocalDate koristeći zadanu vremensku zonu. Jednom preobraćeni, samo trebamo provjerite je li LocalDate objekti su jednaki pomoću je jednako metoda.

Slijedom toga, koristeći ovaj pristup, moći ćemo utvrditi jesu li ta dva Datum predmeti sadrže isti dan.

2.2. Koristeći Trenutak

U gornjem primjeru smo koristili Trenutak kao posredni objekt pri pretvorbi Datum prigovara se LocalDate predmeta. Trenutak, predstavljen u Javi 8, predstavlja određeni trenutak u vremenu.

Možemo izravno skrati Trenutak prigovara jedinici DAYS, koja vrijednosti vremenskog polja postavlja na nulu, a zatim ih možemo usporediti:

javna statička logička vrijednost isSameDayUsingInstant (Datum date1, Datum date2) {Instant instant1 = date1.toInstant () .truncatedTo (ChronoUnit.DAYS); Instant instant2 = date2.toInstant () .truncatedTo (ChronoUnit.DAYS); vratiti instant1.equals (instant2); }

2.3. Koristeći SimpleDateFormat

Od ranih verzija Jave mogli smo koristiti SimpleDateFormat klasa za pretvorbu Datum i Niz reprezentacije objekata. Ova klasa dolazi s podrškom za pretvorbu pomoću mnogih uzoraka. U našem ćemo slučaju koristiti obrazac „yyyyMMdd“.

Koristeći ovo, formatirat ćemo Datum, pretvoriti ga u Niz objekt, a zatim ih usporedite koristeći standard jednako metoda:

javni statički logički isSameDay (Datum datum1, Datum datum2) {SimpleDateFormat fmt = novi SimpleDateFormat ("yyyyMMdd"); vrati fmt.format (date1) .equals (fmt.format (date2)); }

2.4. Koristeći Kalendar

The Kalendar klasa pruža metode za dobivanje vrijednosti različitih datumsko-vremenskih jedinica za određeni trenutak.

Prvo, moramo stvoriti Kalendar instance i postavite Kalendar vrijeme objekata koristeći svaki od navedenih datuma. Tada možemo postaviti upit i pojedinačno usporedite atribute Godina-Mjesec-Dan da shvatimo je li Datum objekti imaju isti dan:

javna statička logička vrijednost isSameDay (Datum datum1, Datum datum2) {Kalendar kalendara1 = Calendar.getInstance (); calendar1.setTime (datum1); Kalendar Calendar2 = Calendar.getInstance (); calendar2.setTime (datum2); vratiti kalendar1.get (Kalendar.GODINA) == kalendar2.get (Kalendar.GODINA) && kalendar1.get (Kalendar.MJESEC) == kalendar2.get (Kalendar.MJESEC) && kalendar1.get (Kalendar.DAY_OF_MONTH) == kalendar2 .get (Calendar.DAY_OF_MONTH); }

3. Vanjske knjižnice

Sad kad dobro razumijemo kako uspoređivati Datum objekte koji koriste nove i stare API-je koje nudi jezgra Java, pogledajmo neke vanjske knjižnice.

3.1. Apache Commons Lang DateUtils

The DateUtils klasa nudi brojne korisne uslužne programe koji olakšavaju rad s naslijeđem Kalendar i Datum predmeta.

Artefakt Apache Commons Lang dostupan je kod Maven Central:

 org.apache.commons commons-lang3 3.9 

Tada možemo jednostavno koristiti metodu jeSameDay iz DateUtils:

DateUtils.isSameDay (datum1, datum2);

3.2. Biblioteka Joda-Time

Alternativa jezgri Java Datum i Vrijeme knjižnica je Joda-Time. Ova široko korištena knjižnica izvrsno zamjenjuje rad s datumom i vremenom.

Artefakt se može naći na Maven Central:

 joda-vrijeme joda-vrijeme 2.10 

U ovoj knjižnici, org.joda.time.LocalDate predstavlja datum bez vremena. Stoga možemo konstruirati LocalDate predmeti iz java.util.Datum objekte, a zatim ih usporedite:

javna statička logička vrijednost isSameDay (Datum datum1, Datum datum2) {org.joda.time.LocalDate localDate1 = novi org.joda.time.LocalDate (datum1); org.joda.time.LocalDate localDate2 = novi org.joda.time.LocalDate (datum2); vrati localDate1.equals (localDate2); }

3.3. Biblioteka Date4J

Date4j također nudi jednostavnu i jednostavnu implementaciju koju možemo koristiti.

Isto tako, dostupan je i iz Maven Central:

 com.darwinsys hirondelle-date4j 1.5.1 

Koristeći ovu knjižnicu, trebamo konstruirati Datum vrijeme objekt iz a java.util.Datum objekt. Tada možemo jednostavno koristiti jeSameDayAs metoda:

javna statička logička vrijednost jeSameDay (Datum datum1, Datum datum2) {DateTime dateObject1 = DateTime.forInstant (date1.getTime (), TimeZone.getDefault ()); DateTime dateObject2 = DateTime.forInstant (date2.getTime (), TimeZone.getDefault ()); vratiti dateObject1.isSameDayAs (dateObject2); }

4. Zaključak

U ovom smo brzom vodiču istražili nekoliko načina provjere postoje li dva java.util.Datum predmeti sadrže isti dan.

Kao i uvijek, puni izvorni kôd članka dostupan je na GitHub-u.


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