【发布时间】:2019-08-07 14:09:08
【问题描述】:
我读过的所有内容都说时间戳是 UTC 并且没有偏移量或时区。但是,我 99% 肯定 MS Sql Server JDBC 正在从数据库中读取值并将其设置为我的本地时区。
更新:请不要参考可能重复的问题询问如何使用 UTC 日期时间设置时间戳。我的问题是如何读取数据库中的 UTC 时间戳值。
调试器显示作为时区为丹佛的 GregorianCalender 对象保存的对象。
【问题讨论】:
-
在
Date的某个地方隐藏了一些时区信息,其中Timestamp是一个子类,所以它也适用于那个类。它不会影响Timestamp的任何可观察到的行为,所以我会说“有”一个时区对于所有实际目的都是不正确的。无论如何,该类设计不佳且已过时,因此您不应该使用它,因此不必关心它是否有时区。 -
Is java.util.Date using TimeZone? 的可能重复项(因为
Timestamp是java.util.Date的子类) -
时间线处理是一团糟,它取决于数据库设置、会话时区和本地时区(当然还有数据类型)。它因驱动程序而异。使用
getTimestamp(x, utccal)变体来指定所需的时区确实有帮助 -
JDBC 规范要求在使用
java.sql.Timestamp时在当前时区解释时间戳,除此之外,java.sql.Timestamp.toString()的实现将 打印当前时区的值。 -
@OleV.V.这是我们提供给客户的图书馆。因此,我们必须使用较旧的 JDBC 驱动程序运行,因为我们的一些客户仍在使用它们。
标签: java jdbc timestamp timezone java-time