源时间在ET,现在它提前一小时运行 - Java

时间:2014-03-09 20:31:47

标签: java android datetime

我正在使用以下代码将时间转换为本地时间。它按时“按时”运行,但今天却提前了一个小时。

SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
                    "yyyy-MM-dd HH:mm:ss");
            simpleDateFormat.setTimeZone(TimeZone.getTimeZone("EST"));

使用“ET”而不是“EST”不起作用。

如何更正转换时间?

谢谢!

2 个答案:

答案 0 :(得分:1)

您只显示创建SimpleDateFormat的代码,所以显然您确定问题存在于那里?

调试日期/时间/时区/夏令时相关的问题可能非常困难,因为很难看到'实际日期;当你检查它时,Date的toString方法会对它自己进行一些时区转换(基于当前的语言环境)。所以我发现将所有输入转换为UTC然后以UTC语言环境打印出来最容易。

无论如何,你说' ET'不起作用?我对它没什么经验,但如果你查看TimeZone的文档,你应该能够提出一个算法,打印出你系统上安装的所有时区。如果EST与ET不同(是吗?)那么这将永远不会奏效。您需要确定Java已分配给ET时区的名称,并使用它们来创建日期格式化程序。

诀窍是使用语言环境X的日期格式化程序解析输入(在语言环境X中),然后在计算中使用日期(始终为UTC,因此可以说是时区中性)。然后,再次使用具有正确语言环境的日期格式返回时区X或Y进行输出。

答案 1 :(得分:0)

您可以尝试使用EDT。

我知道这似乎与你在这里要做的事情完全相反,但如果它看到EST并尝试转换为EDT,你可能会在某处进行双重调整。

今天夏令时的事实真正指向TimeZone问题。