У меня есть код, вставляющий метку времени в таблицу Postgres. Вот определение поля, в которое вставлена метка времени:
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».
На самом деле, у меня был запущен этот код, который я хотел бы запустить на старом сервере, но после переноса кода я получил эту проблему. Проблема не в Postgres, потому что я все еще использую ту же БД. Я также проверил часовой пояс ОС, и они одинаковы. Я также попытался "System.out.println (" TZ = "+ TimeZone.getDefault ());" и я получаю одинаковый часовой пояс на обоих серверах. Поэтому я пришел к выводу, что драйвер JDBC преобразует дату в UTC, прежде чем вставить ее в таблицу.
Может кто-нибудь помочь мне выяснить, почему метка времени конвертируется?
Спасибо