Heim >Java >javaLernprogramm >Wie kann ich Zeitzonen richtig handhaben, wenn ich java.sql.Timestamp mit JDBC verwende?

Wie kann ich Zeitzonen richtig handhaben, wenn ich java.sql.Timestamp mit JDBC verwende?

Barbara Streisand
Barbara StreisandOriginal
2024-12-15 20:48:17949Durchsuche

How Can I Properly Handle Time Zones When Using java.sql.Timestamp with JDBC?

Verstehen der Zeitzonenüberlegungen für java.sql.Timestamp

Bei der Verwendung von java.sql.Timestamp zum Speichern und Abrufen von Zeitstempeln in einer Datenbank ist es wichtig, Folgendes zu berücksichtigen Einfluss von Zeitzonen auf die Daten.

Zeitzonenbehandlung in JDBC

Wenn ein Zeitstempelobjekt mit setTimestamp(int, Timestamp) ohne Angabe eines Kalenderobjekts festgelegt wird, verwendet der JDBC-Treiber standardmäßig die Zeitzone der virtuellen Maschine, auf der die Anwendung ausgeführt wird. Dies bedeutet, dass der gespeicherte Zeitstempel in der Datenbank möglicherweise nicht die beabsichtigte Zeitzone widerspiegelt.

UTC-Zeitstempel speichern

Um sicherzustellen, dass UTC-Zeitstempel korrekt in der Datenbank gespeichert werden, muss ein Kalenderobjekt bereitgestellt werden to setTimestamp(int, Timestamp, Calendar) mit der gewünschten Zeitzone. Für UTC kann dies wie folgt erreicht werden:

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
stmt.setTimestamp(11, tsSchedStartTime, cal);

Auswirkungen auf die Ausgabe

Durch die Nichtberücksichtigung von Zeitzonenüberlegungen speichert der bereitgestellte Code den UTC-Zeitstempel fälschlicherweise als lokalen Zeitstempel. Dies kann zu Diskrepanzen beim Abrufen der Daten aus der Datenbank führen, da diese basierend auf der Zeitzone der aktuellen Anwendung interpretiert werden.

Auswirkungen der lokalen Zeitzone auf Timestamp.toString()

Die Die Methode Timestamp.toString() druckt, ähnlich wie java.util.Date, den Zeitstempel basierend auf der lokalen Zeitzone der virtuellen Maschine. Es spiegelt nicht die Zeitzone des gespeicherten Werts wider.

JDBC 4.2-Lösung

JDBC 4.2 führt Unterstützung für java.time.LocalDateTime und java.time.LocalTime für die Datentypen TIMESTAMP und TIME ein . Diese Klassen sind zeitzonenunabhängig, sodass keine expliziten Zeitzonenkonvertierungen erforderlich sind.

Das obige ist der detaillierte Inhalt vonWie kann ich Zeitzonen richtig handhaben, wenn ich java.sql.Timestamp mit JDBC verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn