Heim >Java >javaLernprogramm >Wie kann ich Zeitzonen richtig handhaben, wenn ich java.sql.Timestamp mit JDBC verwende?
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.
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.
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);
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.
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 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!