时区EST与EST5EDT有何不同?

时间:2013-04-05 06:30:17

标签: java timezone timezone-offset

EST5EDT的EST有何不同? EST不考虑DST吗?

我写了一个小的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获得时区偏移?

1 个答案:

答案 0 :(得分:7)

  

Isn< EST是否考虑了DST?

没有。按定义EST是东部标准时间"或UTC-5:00。

美国东部时间是东部夏令时"或UTC-4:00。

这有点令人困惑,因为例如纽约在东部时间和东部时间之间切换,西雅图在PST和PDT之间切换。

有时候人们会说错误#34;我会在美国东部时间下午1点给你打电话。当他们真正想说的时候,"我会在东部时间下午1点给你打电话"这适当考虑了它是否是夏令时。

wikipage有更多信息。

  

为什么getRawOffset返回5而不是4

Timezone.getRawOffset始终返回标准时间的毫秒数,即5 *(60 * 60 * 1000)

由于UTC偏移量根据一年中的某一天而变化(占DST帐户),因此您需要使用getOffset,并提供您想要使用的日期。