JDBC/MySQL: timestamp Speichern immer mit UTC
Ich würde gerne speichern, wird ein timestamp in die Datenbank ohne Konvertierung in die lokale Zeitzone von jdbc-Treiber. Derzeit nur MySQL und PostgreSQL sind für mich wichtig, aber ich würde mich freuen, wenn es eine Datenbank-unabhängige Lösung.
Beispiel:
// i want that to be saved as 1970-01-01 00:00:00
TimeStamp ts = new java.sql.Timestamp(0);
// gets transformed to local time by jdbc driver (in my case to 1970-01-01 01:00:00)
st.setTimestamp(0, new java.sql.Timestamp(0));
// only works using postgres (mysql connector seems to ignore the calendar)
// postgres => 1970-01-01 00:00:00
// mysql => 1970-01-01 01:00:0
Calendar calutc = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
st.setTimestamp(0, new java.sql.Timestamp(0), utccal);
Ich schon versucht zu berechnen, die einen timestamp-Wert verwandelt, um den richtigen Wert (zum Beispiel -3600000 => 1970-01-01 00:00:00 Uhr in meiner Zeitzone), aber das funktioniert nicht mit postgres auf Termine in der Nähe des day-light saving time changes.
InformationsquelleAutor Werzi2001 | 2013-03-04
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fand ich die Lösung. MySQL hatte einen Fehler in Ihren JDBC-connector ignorieren die mitgelieferte Kalender-Objekt setTimestamp/getTimestamp. Sie fixen den bug in der version 5.1.5 der Anschluss, sondern der alte (falsche) Verhalten ist immer noch das default-Verhalten. Den korrekten code verwenden, müssen Sie den parameter "useLegacyDatetimeCode=false" in der connector-url.
Weitere Informationen:
http://bugs.mysql.com/bug.php?id=15604
Datum und Timestamp in Java timezone-Agnostiker. Der neue Timestamp(0) tatsächlich entspricht, die die 1970-01-01 00:00:00 UTC. Verwenden Sie die " = SimpleDateFormat und legen Sie die gewünschte Zeitzone auf Sie, um visuell überprüfen Sie Ihre Termine. Subtraktion eine lange Konstante, die aus einem Zeitstempel, um es sich "richtig" beim drucken mit System.aus.println ist sehr falsch.
Wenn Sie eine Datenbank, haben Sie die Wahl der Datentypen für Datum/Zeit/Zeitstempel. Einige von Ihnen unterstützen Zeitzone Informationen und einige - nicht. Wenn Sie wählen, verwenden Sie die Zeit zone der Handhabung in Ihrer Datenbank, müssen Sie lernen, es in details. Wenn Sie möchten, diese zu umgehen, haben Sie eine option zum speichern von Datum/Uhrzeit/Zeitstempel in der Datenbank als strings und nicht alle Formatierungen in Ihrem Java-code.