我在項目中使用了Spring Boot和Hibernate 5以及MySQL。使用休眠時以UTC時區獲取日期
如何從UTC數據庫中獲取DateTime而不是JVM的時區?
是否有任何配置添加到application.properties
像jadira.usertype.javaZone
Jadira或其他技巧?
我在項目中使用了Spring Boot和Hibernate 5以及MySQL。使用休眠時以UTC時區獲取日期
如何從UTC數據庫中獲取DateTime而不是JVM的時區?
是否有任何配置添加到application.properties
像jadira.usertype.javaZone
Jadira或其他技巧?
您可以在JVM的默認時區設置爲UTC,當你開始你的應用程式,例如
TimeZone.setDefault(TimeZone.getTimeZone("Etc/UTC"));
這將確保日期總是UTC,當它在你的應用程序,保存到數據庫四處移動,從數據庫等檢索到的,並可以在需要時轉換爲任何需要的時區。
您可以從數據庫中獲取的日期,並將其轉換爲UTC
Date localTime = getDateFromDB();
String format = "yyyy/MM/dd HH:mm:ss";
SimpleDateFormat sdf = new SimpleDateFormat(format);
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Date gmtTime = new Date(sdf.format(localTime));
要爲所有日期字段設置UTC添加以下字段到MySQL連接字符串:
useTimezone=true
serverTimezone=UTC
useLegacyDatetimeCode=false
示例連接字符串:
jdbc:mysql://hostname/databaseName?useTimezone=true&serverTimezone=UTC&useLegacyDatetimeCode=false
AND
使用jadira用戶類型來設置UTC特定字段
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime",
parameters = { @Parameter(name = "databaseZone", value = "UTC")})
private DateTime dateTime;
謝謝大家的幫助,我想了Arul庫馬蘭和Sanj解決方案,但它不工作很好。所以我選擇將日期存儲爲varchar並使用轉換器將其作爲ZonedDateTime來獲取
你能解釋什麼是不工作? – Sanj
由於Hibernate 5.2,現在可以使用hibernate.jdbc.time_zone
配置屬性,如this article中所述。
基本上,你現在可以強制使用以下配置屬性都TIMESTAMP
和TIME
列UTC時間:
<property name="hibernate.jdbc.time_zone" value="UTC"/>
你知道出來的數據庫的時區? – Sanj