2015-10-13 85 views
-1

我想在智能IDEA中将EST时区从EST转换为IST,因此转换后我获得10小时30分钟的差异,但是当我使用eclipse运行相同的程序时,我获得了9 hr 30分钟,这是正确的,关于时间差异,你可以检查谷歌。Intellij IDEA中的时区覆盖问题

请参考下面的代码

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     simpleDateFormat.setTimeZone(TimeZone.getTimeZone("EST")); 
     Date dateValue = simpleDateFormat.parse("2015-09-15 05:00:00.000 EST"); 
     System.out.println(dateValue); 

输出:

Correct value - Tue Sep 15 14:30:00 IST 2015 
Wrong value - Tue Sep 15 15:30:00 IST 2015 

请建议这背后的原因。

+2

什么*确切*你期待“EST”是什么意思? (这不是一个时区 - 它是一个缩写,用于东部时间*一半的时间)。你得到了什么结果?基本上,我们需要知道您是否期望“EST”意味着“东部时间”(UTC-4此刻)或“东部标准时间”(UTC-5)。 –

+0

嗨,乔恩,我添加了输出 – vijendra

+0

是的,但是你还没有澄清你期望的“EST”是什么意思。我怀疑你在两个IDE中使用了两个不同版本的Java,并且他们以不同的方式对待它。基本上,使用缩写而不是时区ID是一个非常糟糕的主意。 –

回答

1

我怀疑你实际上想要东部时间的时区,例如美国/纽约。毕竟,东部时间9月15日没有观测到美国东部时间 - 它正在观测美国东部时间(至少在任何时间观察夏令时,据我所知,东部时间的大部分时间)。

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("America/New_York")); 
Date dateValue = simpleDateFormat.parse("2015-09-15 05:00:00.000"); 
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); 
System.out.println(simpleDateFormat.format(dateValue)); 

这给出的2015年9月15日9点00分○○秒输出,可见美国/纽约是后面的时刻(和后面印度因此9.5小时)UTC确实4小时。

现在假设你知道你真的想在东部时间 - 这就是为什么我从你正在解析的字符串中删除“EST”后缀的原因。如果你实际上想要从字符串中获得值,那么你需要非常小心,因为这些缩写是不明确的 - 在这种情况下,显然是错误的。

+1

非常有帮助 - 谢谢乔恩:) – vijendra