java.util.Date vs java.sql.Date

1. Prehľad

V tomto výučbe budeme porovnávať dve triedy dátumov: java.util.Date a java.sql.Date.

Po dokončení porovnania by malo byť jasné, ktorý z nich použiť a prečo.

2. java.util.Date

The java.util.Date trieda predstavuje konkrétny časový okamih s presnosťou na milisekundy od 1. januára 1970 00:00:00 GMT (epochálny čas). Trieda slúži na udržiavanie koordinovaného svetového času (UTC).

Môžeme to inicializovať dvoma spôsobmi.

Zavolaním konštruktéra:

Dátum dátum = nový Dátum ();

čím sa vytvorí nový dátum objekt s časom nastaveným na aktuálny čas, meraný na najbližšiu milisekundu.

Alebo prejdením niekoľkých milisekúnd od epochy:

dlhá časová pečiatka = 1532516399000; // 25. júla 2018 10:59:59 UTC Dátum dátum = nový Dátum (časová známka);

Upozorňujeme, že iné konštruktory, ktoré boli prítomné pred jazykom Java 8, sú teraz zastarané.

Avšak Dátum má množstvo problémov a celkovo sa jeho použitie už neodporúča.

Je premenlivý. Po jeho inicializácii môžeme zmeniť jeho vnútornú hodnotu. Napríklad môžeme nazvať nastavte čas metóda:

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

Ak sa chcete dozvedieť viac o výhodách nemenných objektov, prečítajte si tento článok: Nemenné objekty v Jave.

Rovnako veľmi dobre nespracuje všetky dátumy. Technicky by to malo odrážať koordinovaný svetový čas (UTC). Závisí to však od operačného systému hostiteľského prostredia.

Väčšina moderných operačných systémov používa 1 deň = 24h x 60m x 60s = 86400 sekúnd, čo, ako vidíme, neberie do úvahy „priestupok“.

So zavedením Java 8 java.time malo by sa použiť balenie. Pred jazykom Java 8 bolo k dispozícii alternatívne riešenie - Joda Time.

3. java.sql.Date

The java.sql.Date predlžuje java.util.Date trieda.

Jeho hlavným účelom je reprezentovať DÁTUM SQL, ktorý uchováva roky, mesiace a dni. Neuchovávajú sa žiadne časové údaje.

Dátum je v skutočnosti uložený v milisekundách od 1. januára 1970 00:00:00 GMT a časová časť je normalizovaná, t. J. Nastavená na nulu.

V podstate je to zavinovačka dookola java.util.Date ktorý zvláda špecifické požiadavky na SQL. java.sql.Date by sa mali používať iba pri práci s databázami.

Avšak ako java.sql.Date nedrží informácie o časovej zóne, prevod časovej zóny medzi našim lokálnym prostredím a databázovým serverom závisí od implementácie ovládača JDBC. To dodáva ďalšiu úroveň zložitosti.

Na záver si všimnime, že na podporu ďalších dátových typov SQL: SQL TIME a SQL TIMESTAMP, dva ďalšie java.sql triedy sú k dispozícii: Čas a Časová značka.

Ten druhý, aj keď siaha od java.util.Date, podporuje nanosekundy.

4. Záver

Trieda java.util.Date ukladá hodnotu dátumu a času ako milisekundy od epochy. java.sql.Date ukladá hodnotu iba pre dátum a bežne sa používa v JDBC.

Nakladanie s dátumami je zložité. Musíme si uvedomiť špeciálne prípady: skokové sekundy, rôzne časové pásma atď. Pri jednaní s JDBC môžeme použiť java.sql.Date opatrne.

Ak budeme používať java.util.Date, musíme si uvedomiť jeho nedostatky. Ak používate Java 8, potom radšej nepoužívajte java.util.Date vôbec.


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