2016-11-11 63 views
1

我需要存儲來自不同國家的多個用戶詳細信息。如何將日期存儲在數據庫中(採用UTC格式)以及如何根據其時區向用戶顯示日期。 我正在使用Java和mySQL。在Java中處理多個時區

+1

有什麼解決方案使用Java 8? –

+0

請看看http://stackoverflow.com/questions/12487125/java-how-do-you-convert-a-utc-timestamp-to-local-time – Anptk

+0

要轉換時區之間的時間[JodaTime](http ://stackoverflow.com/questions/19002978/in-joda-time-how-to-convert-time-zone-without-changing-time)是你最好的選擇。 – Thiefster

回答

0

在MySQL中,在表中使用TIMESTAMP數據類型。

對於每個用戶,存儲timezone列,VARCHAR(64)是該列的良好數據類型。當用戶註冊使用您的系統時,請詢問時區值。礦是America/New_York。您的可能或不可能是Asia/Kolkata。對於此用戶首選項設置的用戶界面,WordPress.org軟件就是一個很好的例子。

最後,當你建立從Java程序到你的DBMS在代表用戶的連接,發出SQL命令

SET SESSION time_zone='(whatever tz string the user gave you)' 

你處理任何用戶數據之前。

這將導致您的表格的所有時間都轉換爲UTC,並且所有時間都會被轉換爲本地。它適用於NOW()CURDATE()。再次,您必須使用TIMESTAMP而不是DATETIMEDATE數據類型。

確保您的服務器操作系統和默認MySQL時區設置爲UTC。如果在開始將信息加載到數據庫之前不這樣做,則幾乎不可能修復。如果你使用一個供應商來運行MySQL,堅持他們得到這個權利,並且如果他們沒有正確的解決方案,就會解僱供應商。

+0

感謝您的回覆。我會嘗試實施這些步驟。 –