Как можно вставить временную метку с часовым поясом в postgresql с помощью подготовленного оператора?
Я пытаюсь вставить в метку времени с полем часового пояса моего БД строку, которая включает дату, время и часовой пояс, используя подготовленный оператор.
Проблема заключается в том, что функция Timestamp.valueof не учитывает часовой пояс, в который строка включается, поэтому она вызывает ошибку.
Принимаемый формат - yyyy- [m] m- [d] d hh: mm: ss [.f...], который не упоминает часовой пояс.
Это точный код, который вызывает ошибку:
pst.setTimestamp(2, Timestamp.valueOf( "2012-08-24 14:00:00 +02: 00" ))
Есть ли способ, которым я могу его преодолеть?
Спасибо заранее!
Ответы
Ответ 1
Основная проблема заключается в том, что java.sql.Timestamp не содержит информацию о часовом поясе. Я думаю, что это всегда считается "местным часовым поясом".
В решении, которое я могу думать о том, чтобы не использовать параметр в PreparedStatement, но литерал временной шкалы в SQL:
update foo
set ts_col = timestamp with time zone '2012-08-24 14:00:00 +02:00'`;
Другим возможным решением может быть передача правильно отформатированной строки в PrepareStatement, которая использует 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");
Ответ 2
Я считаю, что вы могли бы использовать еще одно поле в своей базе данных, которое будет включать часовой пояс. И вычислите время вручную после того, как вы получите эти два поля