10

Ich versuche, in eine Zeitmarke mit Zeitzone Feld meiner DB eine Zeichenfolge einfügen, die Datum, Uhrzeit und Zeitzone mit vorbereiteten Anweisung enthält.Wie kann ich Zeitstempel mit Zeitzone in Postgresql mit vorbereiteten Anweisung einfügen?

Das Problem ist, dass Timestamp.valueof Funktion berücksichtigt nicht die Zeitzone, die der String enthält, so dass es einen Fehler verursacht. Das akzeptierte Format ist yyyy- [m] m- [d] d hh: mm: ss [.f ...], das die Zeitzone nicht erwähnt.

dass der genaue Code ist, der den Fehler verursacht:

pst.setTimestamp (2, Timestamp.valueOf ("2012-08-24 14.00.00 +02: 00"))

Gibt es eine Möglichkeit, dass ich es überwinden kann? Vielen Dank im Voraus!

Antwort

1

Ich glaube, dass Sie ein weiteres Feld in Ihrer Datenbank verwenden könnten, das die Zeitzone enthalten würde. Und berechnen Sie die Zeit manuell, nachdem Sie diese beiden Felder erhalten haben

+0

Ok das ist ein akzeptabler Ansatz, aber ich würde gerne wissen, ob es eine Möglichkeit gibt, es auf dem zuvor genannten Weg zu tun. –

3

Das grundlegende Problem ist, dass ein java.sql.Timestamp keine Zeitzoneninformationen enthält. Ich denke es wird immer "lokale Zeitzone" angenommen.

On Lösung, die ich denken kann, ist kein Parameter in einem PreparedStatement zu verwenden, aber eine Zeitzone wörtlichen in SQL:

update foo 
    set ts_col = timestamp with time zone '2012-08-24 14:00:00 +02:00'`; 

Eine andere mögliche Lösung könnte eine korrekt formatierte String an einen PrepareStatement passieren, die verwendet to_timestamp():

String sql = "update foo set ts_col = to_timestamp(?, 'yyyy-mm-dd hh24:mi:ss')"; 
PreparedStatement pstmt = connection.prepareStatement(sql); 
pstmt.setString(1, "2012-08-24 14:00:00 +02:00"); 
+0

Sollten wir nicht in das Datumsformat von to_timestamp() die Zeitzone aufnehmen? –

+0

@ MichelangeloVandilakis: Es ist im zweiten Beispiel enthalten (es ist direkt nach dem '?' Platzhalter). Das erste Beispiel ist * not * ein Aufruf von 'to_timstamp()', aber ein Zeitstempel * literal *, der bestimmten Regeln folgen muss. –

+0

vielleicht habe ich es nicht richtig geschrieben. Ich meine, dass das Format nur das Jahr, Monat, Tag Stunden, Minuten, Sekunden enthält, aber nichts zu zeigen, dass Zeitzone enthalten ist –

Verwandte Themen