2012-03-29 68 views
3

我有一個Web應用程序,並且如果客戶端(在英國這是在時區UTC + 0000)我發送的日期參數作爲一個字符串,像這樣:Java:日期和抵消問題?

​​

但是當我收到此字符串我的Java REST服務,並嘗試使用SimpleDateFormater將其解析爲日期對象,它假設即時消息的內容是:「這是UTC時間10:00,im位於UTC + 0000時區」,因此它保存爲10 :上午00時UTC時間,而不是上午09:00 UTC時間,這是從10:00 AM BST(+0000)開始的正確對話。

這裏是我的Java代碼示例:

String dateString = "2012-03-28 10:00:00 +0000"; 
Timestamp timestamp= null; 
try{ 
DateFormat planningDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z"); 
Date date = planningDateFormat.parse(dateString); 
timestamp = new Timestamp(date.getTime()); 
System.out.println("Time stamp value is: " + timestamp.getTime()); 
System.out.println("Date value after parse: " + date); 
System.out.println("Time value passed in was: " + dateString); 
} 
catch(Exception e){} 

,輸出:

$ java TimeTest 
Time stamp value is: 1332917100000 
Date value after parse: Wed Mar 28 11:00:00 BST 2012 
Time value passed in was: 2012-03-28 10:00:00 +0000 

我怎樣才能解決這個問題呢?

回答

1

構建Web應用程序時,TimeZone管理是最具挑戰性的部分:)。但是網絡上有好幾個很好的項目可以爲這種情況提供很好的支持。其中一人將約達時間

http://joda-time.sourceforge.net/

6

這意思是說:「這是日期和時間BST是+0000 UTC的偏移量」

這那麼你的問題。 BST比UTC早一個小時。所以上午11點BST是上午10點,因此你的輸出。你應該多讀一點UTC

英國是而不是在「時區UTC + 0000」它是在「時區歐洲/倫敦」,即UTC + 0在冬季和UTC + 1在夏季。

(如波格丹說,時區是硬Joda Time比內置Java一個反正一個更好的日期/時間庫...但它會給你同樣的答案...)

編輯:只是爲了使它完全清楚,這個值「2012-03-28 10:00:00 +0000」表示在任何理智的系統上午10​​點UTC。正如Java向你展示的那樣,這是BST上午11點。如果你試圖讓它變成別的東西,那麼你應該停止這樣做,因爲你會與人們所知道的每個系統不一致。

+0

是的,我知道UTC是如何工作的,我試圖說的是我有時間在BST而不是UTC。林不發送它作爲UTC,我發送它代表10AM BST,並希望JAVA轉換我的10:00 AM BST到上午9:00 UTC。 – 2012-03-29 12:19:27

+0

@Mo .:由於您已在您的帖子中聲明瞭*次數*,因此當* *不是*時,英國處於「UTC + 0000」時,您顯示*不知道UTC如何工作。 BST是* not * +0000。英國*不是UTC + 0000時區。時區偏移給出的是與UTC的偏移量,而不是「任何時區內的標準時間」。 – 2012-03-29 12:21:22

+0

我的意思是,我的時間基本上代表了英國時間(上午10:00,當地時間,而不是上午10:00 UTC) – 2012-03-29 12:22:41