2013-04-05 408 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