LocalDateTime时区有效,而LocalTime则无效

时间:2017-07-31 10:32:13

标签: java mysql hibernate datetime java-time

我有一个带有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。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

根据Java documentationandroid:stateListAnimator应检查当前的LocalTime.now()。我只使用过Hibernate一次,并且完全混淆了事情的规则和顺序(我的坏!)。我建议您使用TimeZone。因此,你将独立于其他一切。

我希望它有所帮助。