2016-04-05 25 views
2

我在項目中使用了Spring Boot和Hibernate 5以及MySQL。使用休眠時以UTC時區獲取日期

如何從UTC數據庫中獲取DateTime而不是JVM的時區?

是否有任何配置添加到application.propertiesjadira.usertype.javaZone Jadira或其他技巧?

+0

你知道出來的數據庫的時區? – Sanj

回答

0

您可以在JVM的默認時區設置爲UTC,當你開始你的應用程式,例如

TimeZone.setDefault(TimeZone.getTimeZone("Etc/UTC")); 

這將確保日期總是UTC,當它在你的應用程序,保存到數據庫四處移動,從數據庫等檢索到的,並可以在需要時轉換爲任何需要的時區。

-1

您可以從數據庫中獲取的日期,並將其轉換爲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)); 
3

要爲所有日期字段設置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; 
0

謝謝大家的幫助,我想了Arul庫馬蘭和Sanj解決方案,但它不工作很好。所以我選擇將日期存儲爲varchar並使用轉換器將其作爲ZonedDateTime來獲取

+0

你能解釋什麼是不工作? – Sanj

3

由於Hibernate 5.2,現在可以使用hibernate.jdbc.time_zone配置屬性,如this article中所述。

基本上,你現在可以強制使用以下配置屬性都TIMESTAMPTIME列UTC時間:

<property name="hibernate.jdbc.time_zone" value="UTC"/> 
相關問題