java.util.Date vs java.sql.Date

1. Oversikt

I denne opplæringen skal vi sammenligne to dataklasser: java.util.Date og java.sql.dato.

Når vi har fullført sammenligningen, bør det være klart hvilken du skal bruke og hvorfor.

2. java.util.Date

De java.util.Date klasse representerer et bestemt øyeblikk, med millisekund presisjon siden 1. januar 1970 00:00:00 GMT (epoken). Klassen brukes til å holde koordinert universell tid (UTC).

Vi kan initialisere det på to måter.

Ved å ringe konstruktøren:

Dato dato = ny dato ();

som vil skape et nytt Dato objekt med tiden satt til gjeldende tid, målt til nærmeste millisekund.

Eller ved å passere et antall millisekunder siden epoken:

lang tidsstempel = 1532516399000; // 25. juli 2018 10:59:59 UTC Dato dato = ny dato (tidsstempel);

La oss merke oss at andre konstruktører, som er tilstede før Java 8, er utfaset nå.

Derimot, Dato har en rekke problemer, og generelt anbefales ikke bruken lenger.

Det er foranderlig. Når vi har initialisert den, kan vi endre dens interne verdi. For eksempel kan vi kalle setTime metode:

date.setTime (0); // 1. januar 1970 00:00:00

For å lære mer om fordelene med uforanderlige objekter, sjekk ut denne artikkelen: Uforanderlige objekter i Java.

Det håndterer heller ikke alle datoer veldig bra. Teknisk sett bør den gjenspeile koordinert universell tid (UTC). Det avhenger imidlertid av et operativsystem i vertsmiljøet.

De fleste moderne operativsystemer bruker 1 dag = 24h x 60m x 60s = 86400 sekunder, som som vi kan se ikke tar "sprang sekund" med i betraktningen.

Med introduksjonen av Java 8, java.time pakken skal brukes. Før Java 8 var en alternativ løsning tilgjengelig - Joda Time.

3. java.sql.Date

De java.sql.dato strekker java.util.Date klasse.

Hovedformålet er å representere SQL DATE, som holder år, måneder og dager. Ingen tidsdata oppbevares.

Faktisk er datoen lagret som millisekunder siden 1. januar 1970 00:00:00 GMT og tidsdelen er normalisert, dvs. satt til null.

I utgangspunktet er det en innpakning java.util.Date som håndterer SQL-spesifikke krav. java.sql.dato skal bare brukes når du arbeider med databaser.

Imidlertid, som java.sql.dato ikke har tidssoneinformasjon, avhenger tidssonekonvertering mellom vårt lokale miljø og databaseserver av en implementering av JDBC-driveren. Dette legger til et annet nivå av kompleksitet.

Til slutt, la oss merke, for å støtte andre SQL-datatyper: SQL TIME og SQL TIMESTAMP, to andre java.sql klasser er tilgjengelige: Tid og Tidsstempel.

Det siste, selv om det strekker seg fra java.util.Date, støtter nanosekunder.

4. Konklusjon

Klasse java.util.Date lagrer en dato-tidsverdi som millisekunder siden epoken. java.sql.dato lagrer en datoverdi og brukes ofte i JDBC.

Det er vanskelig å håndtere datoer. Vi må huske på spesielle tilfeller: sprangsekunder, forskjellige tidssoner osv. Når vi arbeider med JDBC kan vi bruke java.sql.dato med forsiktighet.

Hvis vi skal bruke java.util.Date, vi må huske på manglene. Hvis du bruker Java 8, er det bedre å ikke bruke java.util.Date i det hele tatt.


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