2017-07-31 4 views
0

です。私はHibernateでSpringブートアプリケーションを持っています。サーバーのタイムゾーンはUTCです。ヨーロッパ/ロンドンでDST(夏時間)を使用する必要があります。LocalDateTime timezoneが動作しますが、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)をデータベースに保存したときに、DBに同じエントリがあることです。しかし、私は14:00にLocalTime(単独)を保存すると、データベースに13:00として保存されます。それはなぜシーンの後ろに変換される時間?

UPDATE:私はHibernateは時間を変換していないことがわかり

logging.level.org.hibernate.SQL=debug 
logging.level.org.hibernate.type.descriptor.sql=trace 

は、より多くのデバッグ後(application.propertiesに2行を追加)。それは14:00を送ったが、MySQLはそれを13:00に変換する。助言がありますか?

答えて

0

​​によれば、LocalTime.now()は現在のTimeZoneをチェックする必要があります。私はHibernateで一度しか働いていませんでしたし、事態が完了した規則や秩序と完全に混同されました(私の悪い!)。 LocalTime now(ZoneId.of("Europe/London"))を使用することをお勧めします。したがって、あなたは他のすべてから独立しています。

私はそれが役に立ちそうです。

+0

ありがとう@rlinden。 MySQLだけで値を変更するような感じです。私は強制的にヨーロッパ/ロンドンの接続パラメータserverTimezone = Europe/Londonを持っており、DATETIMEには動作しますが、TIMEでは動作しません。つまり、MySQLはDATETIMEでは何もしませんが、TIMEフィールドで値を変更します。私は "CURRENT_TIMESTAMP"などのためにヨーロッパ/ロンドンが必要です。 – psalkowski

関連する問題