18

如何明确设置 H2 应该使用的时区?现在它从底层操作系统获取要使用的时区。我会假设存在一个额外的参数,我将添加到连接字符串中,如下所示。

db.url=jdbc:h2:mem:mybipper;MVCC=true;<timezone=UTC>
4

6 回答 6

13

显然您在连接上没有参数,但数据库将使用加载驱动程序的 JVM 的时区,因此您可以设置-Duser.timezone=UTC. 请注意,加载驱动程序后,您无法更改时区。

于 2013-09-18T22:44:00.660 回答
7

您可以在与数据库交互之前操纵 JVM 时区:

TimeZone.setDefault(TimeZone.getTimeZone("UTC"))

不幸的是,H2 不支持每个连接的时区......但是。

于 2017-04-26T17:56:10.660 回答
7

帮助我的是为 JDBC 而不是 JVM 设置时区配置,这似乎也更合理和更干净的方式,因为它只影响数据库而不是整个 JVM:

spring.jpa.properties.hibernate.jdbc.time_zone=UTC

对另一个问题的回答可能有助于提供更多信息。

于 2019-03-29T13:44:13.430 回答
3

H2 使用 JVM 时区,它会影响您的日期计算。例如,如果您在 Junits 中使用它,您可以设置某个时区,然后在完成后重新输入初始值。例子:

System.setProperty("user.timezone", "GMT-3");
TimeZone.setDefault(null);
于 2018-01-16T07:03:06.503 回答
1

我想您在阅读类型DateDateTime.

显然,H2 在写入和读取期间使用了不同的时区信息。提供具有预期时区的日历会为我返回预期值:

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone(ZoneOffset.UTC))
resultSet.getDate("dateColumn", cal)
于 2019-08-22T14:10:54.760 回答
0

您不能为数据库设置时区。

但是,我不知道 H2 对大多数操作使用时区(至少不是 H2 的当前版本)。

那么,你想解决什么问题呢?

于 2012-11-05T10:24:20.753 回答