使用 java.sql.Timestamp 在数据库中存储和检索时间戳时,考虑以下因素至关重要:时区对数据的影响。
默认情况下,如果使用 setTimestamp(int, Timestamp) 设置 Timestamp 对象而不指定 Calendar 对象,则 JDBC 驱动程序将使用运行应用程序的虚拟机的时区。这意味着数据库中存储的时间戳可能无法反映预期的时区。
为了确保 UTC 时间戳正确存储在数据库中,必须提供 Calendar 对象setTimestamp(int, Timestamp, Calendar) 与所需的时区。对于 UTC,可以通过以下方式实现:
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC")); stmt.setTimestamp(11, tsSchedStartTime, cal);
通过忽略时区考虑,提供的代码错误地将 UTC 时间戳存储为本地时间戳。这可能会导致从数据库检索数据时出现差异,因为它将根据当前应用程序的时区进行解释。
The Timestamp.toString() 方法与 java.util.Date 类似,根据虚拟机本地时区打印时间戳。它不反映存储值的时区。
JDBC 4.2 引入了对 TIMESTAMP 和 TIME 数据类型的 java.time.LocalDateTime 和 java.time.LocalTime 的支持。这些类与时区无关,无需显式时区转换。
以上是在 JDBC 中使用 java.sql.Timestamp 时如何正确处理时区?的详细内容。更多信息请关注PHP中文网其他相关文章!