2013-04-05 404 views
6

EST與EST5EDT有何不同? EST是否考慮到DST?時區EST與EST5EDT有何不同?

我寫了一個小的Java代碼片斷找出差異和輸出稱EST5EDT發生在佔DST同時EST不

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss.SSS"); 
dateFormat.setTimeZone(TimeZone.getTimeZone("EST5EDT")); 
System.out.println("EST5EDT" +dateFormat.format(new Date())); 
    /* prints EST5EDT2013-Apr-05 02:24:16.471 */ 


dateFormat = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss.SSS"); 
dateFormat.setTimeZone(TimeZone.getTimeZone("EST")); 
System.out.println("EST "+dateFormat.format(new Date())); 
    /*prints EST 2013-Apr-05 01:24:16.472 */ 

但低於片段產生令人震驚的輸出

System.out.println("EST5EDT offset "+TimeZone.getTimeZone("EST5EDT").getRawOffset()/(60*60*1000)); 
/* prints 5 instead of 4 (DST) */ 

莫非有人請解釋這裏發生了什麼? getRawOffset爲什麼返回5而不是4?如何通過DST獲得時區偏移?

+0

儘可能避免使用「EST」和「EST5EDT」樣式標識符。改爲使用「America/New_York」和相關的標識符。 [見這裏](http://www.nntp.perl.org/group/perl.datetime/2009/03/msg7221.html)和dup文章。 – 2013-04-05 15:17:47

回答

6

不是EST考慮DST?

否定義定義EST爲「東部標準時間」或UTC-5:00。

EDT是「東部夏令時」或UTC-4:00。

這有點令人困惑,因爲例如紐約在EST和EDT之間切換,而西雅圖在PST和PDT之間切換。

有時候人們會錯誤地說「我會給你打電話給你的東部時間下午1點」,當他們實際上想說「我會打電話給你東部時間下午1點」,這正確地考慮了是否是夏令時。

這個wikipage有一點信息。

爲什麼getRawOffset返回5代替4-

Timezone.getRawOffset總是返回的毫秒數爲標準時間,即5 *(60 * 60 * 1000)

由於UTC偏移根據一年中的某一天進行更改(爲了考慮DST),您需要使用getOffset,併爲其提供您想要使用的日期。

+0

謝謝澄清getRawOffset的疑問。我仍然有一個懷疑TimeZone currentTimeZone = TimeZone.getTimeZone(「EST」); \t Calendar currentDt = new GregorianCalendar(currentTimeZone,Locale.US); System.out.println(「EST in daylight」+ TimeZone.getTimeZone(「EST」)。inDaylightTime(currentDt.getTime()));打印錯誤!這是爲什麼 ? – JeeZ 2013-04-05 08:02:46