我有一个Hibernate的Spring Boot应用程序。服务器时区是UTC。我需要用DST(夏令时)来使用欧洲/伦敦。我设置了在启动时:LocalDateTime时区工作,而LocalTime不工作
TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));
而且与MySQL
datasource:
type: com.zaxxer.hikari.HikariDataSource
url: jdbc:mysql://localhost:3306/example?useUnicode=true&characterEncoding=utf8&useSSL=false&useLegacyDatetimeCode=false&useTimezone=true&serverTimezone=Europe/London
name:
username: ****
password: ****
hikari:
data-source-properties:
cachePrepStmts: true
prepStmtCacheSize: 250
prepStmtCacheSqlLimit: 2048
useServerPrepStmts: true
hibernate.jdbc.time_zone: Europe/London
我不希望我的时间更改为UTC连接。我需要留在DST,就是这样。我的申请仅适用于英国,所以欧洲/伦敦足够好。
问题是,当我有LocalDateTime例如:31.07.2017 14:00并将其存储到数据库,然后我在数据库中具有完全相同的条目。但是,当我在14:00存储LocalTime(单独)时,它会在13:00保存在数据库中。为什么它在现场转换的时间?
UPDATE:
更多的调试后(加入两行application.properties):
logging.level.org.hibernate.SQL=debug
logging.level.org.hibernate.type.descriptor.sql=trace
我看到Hibernate不转换时间。它发送了14:00,但MySQL将它转换为13:00。有什么建议么?
谢谢@rlinden。这看起来像是MySQL单独改变数值。我有连接参数serverTimezone =欧洲/伦敦强制使用欧洲/伦敦和它适用于DATETIME但不适用于时间。我的意思是,MySQL对DATETIME不做任何处理,但在TIME字段中更改值。我需要欧洲/伦敦的“CURRENT_TIMESTAMP”等。 – psalkowski