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 14:07:21.261」ではなく「2010-02-0819:07:21.261」が表示されます。
実際、私はこのコードを実行していましたが、古いサーバーで実行したいのですが、コードを移行した後、その問題が発生しました。私はまだ同じDBを使用しているので、問題はPostgresではありません。OSのタイムゾーンも確認しましたが、同じです。また、「System.out.println( "TZ =" + TimeZone.getDefault());」も試してみました。両方のサーバーで同じタイムゾーンを取得します。したがって、私の結論は、JDBCドライバーが日付をUTCで変換してから、テーブルに挿入しているということです。
タイムスタンプが変換される理由を誰かが理解するのを手伝ってもらえますか?
ありがとう