如何明确设置 H2 应该使用的时区?现在它从底层操作系统获取要使用的时区。我会假设存在一个额外的参数,我将添加到连接字符串中,如下所示。
db.url=jdbc:h2:mem:mybipper;MVCC=true;<timezone=UTC>
如何明确设置 H2 应该使用的时区?现在它从底层操作系统获取要使用的时区。我会假设存在一个额外的参数,我将添加到连接字符串中,如下所示。
db.url=jdbc:h2:mem:mybipper;MVCC=true;<timezone=UTC>
显然您在连接上没有参数,但数据库将使用加载驱动程序的 JVM 的时区,因此您可以设置-Duser.timezone=UTC
.
请注意,加载驱动程序后,您无法更改时区。
您可以在与数据库交互之前操纵 JVM 时区:
TimeZone.setDefault(TimeZone.getTimeZone("UTC"))
不幸的是,H2 不支持每个连接的时区......但是。
帮助我的是为 JDBC 而不是 JVM 设置时区配置,这似乎也更合理和更干净的方式,因为它只影响数据库而不是整个 JVM:
spring.jpa.properties.hibernate.jdbc.time_zone=UTC
我对另一个问题的回答可能有助于提供更多信息。
H2 使用 JVM 时区,它会影响您的日期计算。例如,如果您在 Junits 中使用它,您可以设置某个时区,然后在完成后重新输入初始值。例子:
System.setProperty("user.timezone", "GMT-3");
TimeZone.setDefault(null);
我想您在阅读类型Date
或DateTime
.
显然,H2 在写入和读取期间使用了不同的时区信息。提供具有预期时区的日历会为我返回预期值:
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone(ZoneOffset.UTC))
resultSet.getDate("dateColumn", cal)
您不能为数据库设置时区。
但是,我不知道 H2 对大多数操作使用时区(至少不是 H2 的当前版本)。
那么,你想解决什么问题呢?