postgresql insert timestamp without timezone example
¿Cómo puedo insertar la marca de tiempo con la zona horaria en postgresql con una declaración preparada? (2)
Estoy intentando insertar en una marca de tiempo con el campo de la zona horaria de mi DB una cadena que incluye la fecha, la hora y la zona horaria usando una declaración preparada.
El problema es que Timestamp.valueof function no tiene en cuenta el huso horario que inluye la cadena, por lo que causa un error. El formato aceptado es aaaa- [m] m- [d] d hh: mm: ss [.f ...] que no menciona la zona horaria.
Ese es el código exacto que causa el error:
pst.setTimestamp (2, Timestamp.valueOf ("2012-08-24 14:00:00 +02: 00"))
¿Hay alguna manera de que pueda superarlo? ¡Gracias por adelantado!
Creo que podría usar un campo más en su base de datos, que incluiría la zona horaria. Y calcule la hora manualmente después de obtener estos dos campos
El problema básico es que java.sql.Timestamp no contiene información de zona horaria. Creo que siempre se supone que es "zona horaria local".
En la solución que puedo pensar es en no usar un parámetro en un PreparedStatement, sino un literal de zona horaria en SQL:
update foo
set ts_col = timestamp with time zone ''2012-08-24 14:00:00 +02:00''`;
Otra posible solución podría ser pasar un String con formato adecuado a PrepareStatement que usa 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");