我有一些代码在 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。
谁能帮我弄清楚为什么要转换时间戳?
谢谢