Java 时区EST与EST5EDT有何不同?

Java 时区EST与EST5EDT有何不同?,java,timezone,timezone-offset,Java,Timezone,Timezone Offset,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" +dateFo

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获取时区偏移

EST不考虑DST吗

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

EDT是“东部夏时制”或UTC-4:00

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

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

这里有更多的信息

为什么getRawOffset返回5而不是4

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


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

感谢您澄清了getRawOffset的疑问。我仍然有一个疑问时区currentTimeZone=TimeZone.getTimeZone(“EST”);Calendar currentDt=新的GregorianCalendar(当前时区,Locale.US);System.out.println(“白天的EST”+时区.getTimeZone(“EST”).inDaylightTime(currentDt.getTime());打印错误!为什么?尽可能避免使用
EST
EST5EDT
样式标识符。改用
美国/纽约
和相关标识符。还有dup邮报。