[英]LocalDate changes when being persisted to MySQL database
我有一個在 Linux 機器上運行的 Java 應用程序,它從 API 檢索一些數據並將其保存到 MySQL 數據庫中。 當我嘗試將日期和時間(LocalDate,LocalTime)保存到數據庫中時,Java 和數據庫中的值不同。
例如,對於 2021 年 10 月 9 日和倫敦時間 00:00 的日期,我在數據庫中看到正確的日期是 10 月 9 日,但時間是 23:00 而不是 00:00。 我不得不提到它在從 DST 到 GMT 的小時更改之前工作。 我用於保存到數據庫中的 Java 代碼是這樣的,在對其進行調試時,值保持正確,日期為 10 月 9 日,時間為 00:00:
ZonedDateTime utcTime = fixturesList.get(i).getEvent_date();
ZoneId london = ZoneId.of("Europe/London");
ZonedDateTime dateTimeLondon = utcTime.toInstant().atZone(london);
currentMatchEntity.setDate(dateTimeLondon.toLocalDate());
currentMatchEntity.setTime(dateTimeLondon.toLocalTime());
matchesRepository.save(currentMatchEntity);
我認為 MySql 可能有錯誤的時區,所以我運行了下面的查詢,但結果似乎是正確的:
另外,我認為Linux機器可能存在一些問題,所以我運行了以下命令,但結果似乎也正確。
來自 Java 的 Hibernate 屬性:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://databaseAddress/databaseName;serverTimezone=GMT</property>
<property name="connection.pool_size">2</property>
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="show_sql">true</property>
<property name="current_session_context_class">thread</property>
<!-- DB schema will be updated if needed -->
<!-- <property name="hbm2ddl.auto">update</property> -->
</session-factory>
</hibernate-configuration>
為什么 MySQL 將時間保存為“23:00”而不是“00:00”? 為什么它用一減少小時? 誰能幫我?
11 月 10 日。可能是 DayLightSaving 問題。
通常,您應該能夠避免編寫代碼來轉換時區。 但它需要
DATETIME
和TIMESTAMP
之間正確選擇。 DATETIME
就像為牆上的時鍾拍照。 它已經設置了時區和日光/標准時間。
TIMESTAMP
以 UTC 存儲。 您輸入的內容會根據一些設置悄悄轉換為 UTC。 讀取時,它被轉換回來。
另一個人通過他的計算機從您的服務器獲取TIMESTAMP
將看到與您存儲的時間不同的時間。 對於DATETIME
,你們都看到相同的字符串。
要查看您的 MySQL 服務器是如何配置的:
SHOW VARIABLES LIKE '%zone%';
如果顯示"SYSTEM"
,請查看操作系統設置以了解其含義。
注意事項:英國使用了DST有些年頭。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.