java.util.Date vs java.sql.Date
1. Pregled
U ovom uputstvu usporedit ćemo dvije klase datuma: java.util.Datum i java.sql.Date.
Kad završimo usporedbu, trebalo bi biti jasno koju i zašto koristiti.
2. java.util.Datum
The java.util.Datum klasa predstavlja određeni trenutak u vremenu, s milisekundnom preciznošću od 1. siječnja 1970. 00:00:00 GMT (epoha). Predavanje se koristi za zadržavanje koordiniranog univerzalnog vremena (UTC).
Možemo ga inicijalizirati na dva načina.
Pozivanjem konstruktora:
Datum datuma = novi datum ();
koji će stvoriti novi datum objekt s vremenom podešenim na trenutno vrijeme, izmjereno na najbližu milisekundu.
Ili prolaskom određenog broja milisekundi od epohe:
duga vremenska oznaka = 1532516399000; // 25. srpnja 2018. 10:59:59 UTC Datum datuma = novi datum (vremenska oznaka);
Napomenimo da su drugi konstruktori, prisutni prije Jave 8, sada zastarjeli.
Međutim, Datum ima niz problema i općenito se više ne preporučuje njegova upotreba.
Promjenjivo je. Jednom kad ga inicijaliziramo, možemo promijeniti njegovu unutarnju vrijednost. Na primjer, možemo nazvati Postavi vrijeme metoda:
date.setTime (0); // 01. siječnja 1970 00:00:00
Da biste saznali više o prednostima nepromjenjivih objekata, pogledajte ovaj članak: Nepromjenjivi objekti u Javi.
Također ne podnosi sve datume baš najbolje. Tehnički bi trebao odražavati koordinirano univerzalno vrijeme (UTC). Međutim, to ovisi o operativnom sustavu host okruženja.
Većina modernih operativnih sustava koristi 1 dan = 24h x 60m x 60s = 86400 sekundi, što, kao što vidimo, ne uzima u obzir "prestupnu sekundu".
Uvođenjem Jave 8, java.vrijeme treba koristiti paket. Prije Jave 8 bilo je dostupno alternativno rješenje - Joda Vrijeme.
3. java.sql.Datum
The java.sql.Date proteže se java.util.Datum razred.
Njegova glavna svrha je predstavljati SQL DATUM koji čuva godine, mjesece i dane. Podaci o vremenu se ne čuvaju.
Zapravo, datum je pohranjen u milisekundama od 1. siječnja 1970. 00:00:00 GMT, a vremenski dio je normaliziran, tj. Postavljen na nulu.
U osnovi, to je omot java.util.Datum koji rješava specifične SQL zahtjeve. java.sql.Date treba koristiti samo kada se radi s bazama podataka.
Međutim, kao java.sql.Date ne sadrži podatke o vremenskoj zoni, pretvorba vremenske zone između našeg lokalnog okruženja i poslužitelja baze podataka ovisi o implementaciji JDBC pokretačkog programa. To dodaje novu razinu složenosti.
Na kraju, napomenimo, kako bismo podržali druge SQL vrste podataka: SQL TIME i SQL TIMESTAMP, dvije druge java.sql dostupni su tečajevi: Vrijeme i Vremenska oznaka.
Ovo drugo, iako se proteže od java.util.Datum, podržava nanosekunde.
4. Zaključak
Razred java.util.Datum pohranjuje vrijednost datuma i vremena u milisekundama od epohe. java.sql.Date pohranjuje vrijednost samo za datum i obično se koristi u JDBC.
Rukovanje datumima je nezgodno. Moramo se sjetiti posebnih slučajeva: prijestupne sekunde, različite vremenske zone itd. Kad se bavimo JDBC-om, možemo se koristiti java.sql.Date s oprezom.
Ako ćemo se koristiti java.util.Date, moramo se sjetiti njegovih nedostataka. Ako koristite Javu 8, onda je bolje ne koristiti java.util.Datum uopće.