我有一些代码将时间戳插入到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之前将其插入表中。
有人能帮我弄清楚为什么会转换时间戳吗?
谢谢