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