设置默认时区H2数据库

时间:2012-11-01 11:39:35

标签: h2

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

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

6 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:1)

您无法设置数据库的时区。

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

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

答案 3 :(得分:1)

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

System.setProperty("user.timezone", "GMT-3");
TimeZone.setDefault(null);

答案 4 :(得分:0)

帮助我的是为JDBC而不是JVM设置时区配置,这似乎更合理,更简洁,因为它仅影响数据库而不是整个JVM:

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

My answer到另一个问题可能会有助于提供更多信息。

答案 5 :(得分:0)

我想您在读取类型DateDateTime时会看到这样的“不当行为”。

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

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone(ZoneOffset.UTC))
resultSet.getDate("dateColumn", cal)