如何明确设置H2应该使用的时区?现在它获得了从底层操作系统使用的时区。我会假设存在一个额外的参数,我将添加到连接字符串ala下面的那个。
db.url=jdbc:h2:mem:mybipper;MVCC=true;<timezone=UTC>
答案 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)
我想您在读取类型Date
或DateTime
时会看到这样的“不当行为”。
显然,H2在写入和读取期间使用不同的时区信息。提供具有预期时区的日历会为我返回预期值:
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone(ZoneOffset.UTC))
resultSet.getDate("dateColumn", cal)