У меня есть код, вставляющий отметку времени в таблице Postgres. Вот определение поля, в котором вставляется метка времени:JDBC конвертирует даты в UTC
datelast timestamp without time zone
Я использую этот Java код для обновления данных в поле:
PreparedStatement sqlStatement = connection.prepareStatement(
"UPDATE datetest SET datelast = ? WHERE id = ? ");
sqlStatement.setTimestamp(1, new java.sql.Timestamp((new Date()).getTime()));
sqlStatement.setInt(2, 1);
sqlStatement.executeUpdate();
Моя проблема заключается в том, что он вставляет UTC метку вместо моя местная метка времени (восточное время). Поэтому, когда я проверяю данные в своей таблице, я вижу «2010-02-08 19: 07: 21.261» вместо «2010-02-08 14: 07: 21.261».
На самом деле, у меня был этот код, который я хотел бы использовать на старом сервере, но после переноса кода у меня возникла эта проблема. Проблема не в whit Postgres, потому что я все еще использую одну и ту же БД. Я также проверил часовой пояс ОС, и они те же. Я также попробовал «System.out.println (« TZ = »+ TimeZone.getDefault()); и я получаю тот же часовой пояс на обоих серверах. Поэтому я пришел к выводу, что драйвер JDBC конвертирует дату в UTC, прежде чем вставлять ее в таблицу.
Может ли кто-нибудь помочь мне разобраться, почему временная метка преобразована?
Благодаря
Если ваша колонка специально «без часового пояса», вы хотите, чтобы все даты сохранялись в Universal Time, чтобы у вас была постоянная контрольная точка? –
См. Ответ на соответствующий вопрос по адресу http://stackoverflow.com/questions/508019/jpa-hibernate-store-date-in-utc-time-zone/3430957#3430957. –