2014-07-01 24 views
0

我把我的項目放在時區與我的地方不同的主機上。如何獲取指定時區的時間?

在我的web項目中,我使用「Timestamp」將時間插入到我的數據庫中。所以我需要得到芝加哥的時間(我的時區)。我使用jode time來獲得不同時區的時間。

我的代碼如下:

DateTime dt = new DateTime(); 
    DateTime dtChicago =dt.withZone(DateTimeZone.forID("America/Chicago")); 
    java.sql.Timestamp timeStamp = new java.sql.Timestamp(dtChicago.getMillis()); 

然而,當我測試了一下,我發現如下打印相同毫秒

 DateTime dtLondon = dt.withZone(DateTimeZone.forID("Europe/London")); 
    System.out.println(dtLondon.getMillis()); 
     DateTime dtChicago = dt.withZone(DateTimeZone.forID("America/Chicago")); 
    System.out.println(dtChicago.getMillis()); 

所以,我怎麼能得到確切的「芝加哥」時區時間並將其注入Timestamp?

+3

時間戳沒有時區的概念。 –

+1

''DateTime.getMillis()'總是返回相同的,不管你設置了什麼時區...它返回自1970-01-01T00:00:00Z以來的毫秒數。「。爲什麼不只是存儲時間戳,然後當呈現/使用該值只是轉換爲正確的時區? –

+0

使用格式化程序格式化所需時區中的TimeStamp – MadProgrammer

回答

2

I found the follows print the same milliseconds

不說你明白了嗎? 時間我現在所在的時間可能與時間有所不同,但自Unix epoch以來已過去的時間量是相同的。

時間戳是時間量。它沒有時區的概念。你可以直接存儲它,因爲你有它。

如果您需要格式化以向用戶顯示該格式,則會提供時區,並且該轉換將負責執行時區的時差。

0

您不能將TimeZone放入Timestamp對象中。在與數據庫進行交互時,需要將Calendar提供給setting,並將PreparedStatementgettingResultSet中提供。需要將Calendar設置爲您希望數據存儲在數據庫中的TimeZone。將所有數據標準化爲UTC會爲處理來自多個時區的數據帶來許多優勢。它還消除了當一個小時重複時由DST引起的「模糊不清」時間。

0

你可以得到指定的時區的時間DateTimeZone::convertUTCToLocal方法

long europeMillis = DateTimeZone.forID("Europe/London").convertUTCToLocal(dt.getMillis()); 
long americaMillis = DateTimeZone.forID("America/Chicago").convertUTCToLocal(dt.getMillis()); 
相關問題