2015-10-13 999 views
-1

我想在智能IDEA中將EST時區從EST轉換爲IST,因此轉換後我獲得10小時30分鐘的差異,但是當我使用eclipse運行相同的程序時,我獲得了9 hr 30分鐘,這是正確的,關於時間差異,你可以檢查谷歌。Intellij IDEA中的時區覆蓋問題

請參考下面的代碼

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     simpleDateFormat.setTimeZone(TimeZone.getTimeZone("EST")); 
     Date dateValue = simpleDateFormat.parse("2015-09-15 05:00:00.000 EST"); 
     System.out.println(dateValue); 

輸出:

Correct value - Tue Sep 15 14:30:00 IST 2015 
Wrong value - Tue Sep 15 15:30:00 IST 2015 

請建議這背後的原因。

+2

什麼*確切*你期待「EST」是什麼意思? (這不是一個時區 - 它是一個縮寫,用於東部時間*一半的時間)。你得到了什麼結果?基本上,我們需要知道您是否期望「EST」意味着「東部時間」(UTC-4此刻)或「東部標準時間」(UTC-5)。 –

+0

嗨,喬恩,我添加了輸出 – vijendra

+0

是的,但是你還沒有澄清你期望的「EST」是什麼意思。我懷疑你在兩個IDE中使用了兩個不同版本的Java,並且他們以不同的方式對待它。基本上,使用縮寫而不是時區ID是一個非常糟糕的主意。 –

回答

1

我懷疑你實際上想要東部時間的時區,例如美國/紐約。畢竟,東部時間9月15日沒有觀測到美國東部時間 - 它正在觀測美國東部時間(至少在任何時間觀察夏令時,據我所知,東部時間的大部分時間)。

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("America/New_York")); 
Date dateValue = simpleDateFormat.parse("2015-09-15 05:00:00.000"); 
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); 
System.out.println(simpleDateFormat.format(dateValue)); 

這給出的2015年9月15日9點00分○○秒輸出,可見美國/紐約是後面的時刻(和後面印度因此9.5小時)UTC確實4小時。

現在假設你知道你真的想在東部時間 - 這就是爲什麼我從你正在解析的字符串中刪除「EST」後綴的原因。如果你實際上想要從字符串中獲得值,那麼你需要非常小心,因爲這些縮寫是不明確的 - 在這種情況下,顯然是錯誤的。

+1

非常有幫助 - 謝謝喬恩:) – vijendra