java.util.Date vs java.sql.Date

1. Áttekintés

Ebben az oktatóanyagban két dátumosztályt fogunk összehasonlítani: java.util.Dátum és java.sql.Date.

Miután befejeztük az összehasonlítást, egyértelműnek kell lennie, hogy melyiket és miért kell használni.

2. java.util.Dátum

A java.util.Dátum osztály egy adott pillanatot képvisel, milliszekundum pontossággal 1970. január 1. 00:00:00 GMT (korszak szerint) óta. Az osztály a koordinált világidő (UTC) megtartására szolgál.

Kétféleképpen inicializálhatjuk.

A konstruktor hívásával:

Dátum dátum = új dátum ();

ami újat fog teremteni dátum objektum, amelynek ideje az aktuális időre van beállítva, milliszekundum pontossággal mérve.

Vagy a milliszekundumok elteltével a korszak óta:

hosszú időbélyeg = 1532516399000; // 2018. július 25., 10:59:59 UTC Dátum dátum = új Dátum (időbélyeg);

Megjegyezzük, hogy más, a Java 8 előtti kivitelezők már elavultak.

Azonban, Dátum számos kérdése van, és általában nem ajánlott a használata.

Ez változtatható. Ha inicializáljuk, megváltoztathatjuk a belső értékét. Például hívhatjuk a beállítani az időt módszer:

date.setTime (0); // 1970. január 1. 00:00:00

Ha többet szeretne megtudni a megváltoztathatatlan objektumok előnyeiről, olvassa el ezt a cikket: Javíthatatlan objektumok a Java-ban.

Az összes dátumot nem is kezeli nagyon jól. Technikailag tükröznie kell a koordinált egyetemes időt (UTC). Ez azonban a fogadó környezet operációs rendszerétől függ.

A legtöbb modern operációs rendszer 1 napot = 24 óra x 60 m x 60 másodperc = 86400 másodpercet használ, ami, mint láthatjuk, nem veszi figyelembe a „második ugrást”.

A Java 8 bevezetésével java.time csomagot kell használni. A Java 8 előtt rendelkezésre állt egy alternatív megoldás - Joda idő.

3. java.sql.Dátum

A java.sql.Date kiterjed java.util.Dátum osztály.

Fő célja az SQL DATE ábrázolása, amely éveket, hónapokat és napokat vezet. Nincsenek időadatok.

Valójában a dátum ezredmásodpercként van tárolva 1970. január 1. 00:00:00 GMT óta, és az idő rész normalizálódik, azaz nulla.

Alapvetően ez egy burkoló java.util.Dátum amely kezeli az SQL specifikus követelményeket. java.sql.Date csak adatbázisokkal való foglalkozás esetén szabad használni.

Ahogy azonban java.sql.Date nem tartalmaz időzóna információkat, a helyi környezet és az adatbázis-kiszolgáló közötti időzóna-átalakítás a JDBC illesztőprogram implementációjától függ. Ez újabb összetettségi szintet ad hozzá.

Végül jegyezzük meg, hogy támogassunk más SQL adattípusokat: az SQL TIME és az SQL TIMESTAMP, kettőt java.sql osztályok állnak rendelkezésre: Idő és Időbélyeg.

Ez utóbbi, noha kiterjed a java.util.Dátum, támogatja a nanoszekundumokat.

4. Következtetés

Osztály java.util.Dátum a dátum-idő értéket milliszekundumban tárolja a korszak óta. java.sql.Date csak dátum értéket tárol, és általában a JDBC-ben használják.

A dátumok kezelése bonyolult. Emlékeznünk kell a különleges esetekre: ugró másodpercek, különböző időzónák stb. A JDBC-vel való foglalkozás során használhatjuk java.sql.Date óvatosan.

Ha használni fogjuk java.util.Date, emlékeznünk kell a hiányosságaira. Ha Java 8-at használ, akkor jobb, ha nem használja java.util.Dátum egyáltalán.