我有一个带有Hibernate的Spring Boot应用程序。服务器时区是UTC。我需要使用欧洲/伦敦DST(夏令时)。我在启动时设置了:
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并将其存储到数据库时,我在DB中具有完全相同的条目。但是当我在14:00存储LocalTime(单独)时,它将在13:00保存在数据库中。为什么它会在幕后转换?
更新
经过更多调试(向application.properties添加了两行):
logging.level.org.hibernate.SQL=debug
logging.level.org.hibernate.type.descriptor.sql=trace
我看到Hibernate没有转换时间。它发送了14:00但MySQL将其转换为13:00。有什么建议吗?
答案 0 :(得分:0)
根据Java documentation,android:stateListAnimator
应检查当前的LocalTime.now()
。我只使用过Hibernate一次,并且完全混淆了事情的规则和顺序(我的坏!)。我建议您使用TimeZone
。因此,你将独立于其他一切。
我希望它有所帮助。