11

EST 与 EST5EDT 有何不同?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 获取时区偏移量?

4

1 回答 1

13

EST 不考虑 DST 吗?

不。根据定义,EST 是“东部标准时间”或 UTC-5:00。

EDT 是“东部夏令时间”或 UTC-4:00。

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

有时人们会错误地说“我会在东部时间下午 1 点给你打电话”,而实际上他们的意思是说“我会在东部时间下午 1 点给你打电话”,这适当地考虑了是否是夏令时。

这个维基页面有更多信息。

为什么 getRawOffset 返回 5 而不是 4

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

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

于 2013-04-05T06:33:38.417 回答