java.util.Date vs java.sql.Date

java.util.Date vs java.sql.Date

**

1. Überblick

In diesem Tutorial werden zwei Datumsklassen verglichen:java.util.Date undjava.sql.Date.

Sobald wir den Vergleich abgeschlossen haben, sollte klar sein, welche und warum.

2. java.util.Date

The java.util.Date class represents a particular moment in time, with millisecond precision since the 1st of January 1970 00:00:00 GMT (the epoch time). Die Klasse wird verwendet, um die koordinierte Weltzeit (UTC) zu speichern.

Wir können es auf zwei Arten initialisieren.

Durch Aufrufen des Konstruktors:

Date date = new Date();

Dadurch wird ein neuesdate-Objekt erstellt, dessen Zeit auf die aktuelle Zeit eingestellt ist, gemessen auf die nächste Millisekunde.

Oder indem Sie einige Millisekunden seit der Epoche vergangen sind:

long timestamp = 1532516399000; // 25 July 2018 10:59:59 UTC
Date date = new Date(timestamp);

Beachten Sie, dass andere Konstruktoren, die vor Java 8 vorhanden waren, jetzt veraltet sind.

Date has a number of issues and overall its usage isn’t recommended anymore.

Es ist veränderlich. Sobald wir es initialisiert haben, können wir seinen internen Wert ändern. Zum Beispiel können wir die MethodesetTimeaufrufen:

date.setTime(0); // 01 January 1970 00:00:00

Weitere Informationen zu den Vorteilen unveränderlicher Objekte finden Sie in diesem Artikel:Immutable Objects in Java.

Es werden auch nicht alle Daten sehr gut verarbeitet. Technisch sollte es die koordinierte Weltzeit (UTC) widerspiegeln. Dies hängt jedoch von einem Betriebssystem der Host-Umgebung ab.

Die meisten modernen Betriebssysteme verwenden 1 Tag = 24h x 60m x 60s = 86400 Sekunden, was, wie wir sehen können, die "Schaltsekunde" nicht berücksichtigt.

With the introduction of Java 8, java.time package should be used. Vor Java 8 war eine alternative Lösung verfügbar -Joda Time.

3. java.sql.Date

Dasjava.sql.Date erweitert die Klasse vonjava.util.Date.

Sein Hauptzweck ist die Darstellung des SQL-DATUMS, das Jahre, Monate und Tage enthält. Es werden keine Zeitdaten gespeichert.

Tatsächlich wird das Datum seit dem 1. Januar 1970 00:00:00 GMT in Millisekunden gespeichert, und der Zeitteil wird normalisiert, d. H. auf null setzen.

Grundsätzlich handelt es sich um einen Wrapper umjava.util.Date, der SQL-spezifische Anforderungen behandelt. java.sql.Date sollte nur beim Umgang mit Datenbanken verwendet werden.

Dajava.sql.Date keine Zeitzoneninformationen enthält, hängt die Zeitzonenkonvertierung zwischen unserer lokalen Umgebung und dem Datenbankserver von der Implementierung des JDBC-Treibers ab. Dies erhöht die Komplexität zusätzlich.

Beachten Sie abschließend, dass zur Unterstützung anderer SQL-Datentypen: SQL TIME und SQL TIMESTAMP zwei weitere Klassen vonjava.sqlverfügbar sind:Time undTimestamp.

Letzteres unterstützt Nanosekunden, obwohl es sich vonjava.util.Date erstreckt.

4. Fazit

Die Klassejava.util.Date speichert einen Datums- / Zeitwert als Millisekunden seit der Epoche. java.sql.Date speichert nur einen Datumswert und wird häufig in JDBC verwendet.

Der Umgang mit Daten ist schwierig. Wir müssen uns an Sonderfälle erinnern: Schaltsekunden, verschiedene Zeitzonen usw. Im Umgang mit JDBC können wirjava.sql.Date mit Vorsicht verwenden.

Wenn wirjava.util.Date, verwenden wollen, müssen wir uns an die Mängel erinnern. Wenn Sie Java 8 verwenden, sollten Siejava.util.Date überhaupt nicht verwenden.

**