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

源时间在ET中,现在它提前一小时运行-Java,java,android,datetime,Java,Android,Datetime,我使用以下代码将时间转换为本地时间。它本来是“准时”运行的,但今天它提前了一个小时 SimpleDateFormat simpleDateFormat = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); simpleDateFormat.setTimeZone(TimeZone.getTimeZone("EST")); 用“ET”代替“EST”是行不通的 如何更正转换的时间 谢谢 您只显

我使用以下代码将时间转换为本地时间。它本来是“准时”运行的,但今天它提前了一个小时

SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
                    "yyyy-MM-dd HH:mm:ss");
            simpleDateFormat.setTimeZone(TimeZone.getTimeZone("EST"));
用“ET”代替“EST”是行不通的

如何更正转换的时间


谢谢

您只显示创建SimpleDataFormat的代码,因此显然您确定问题就在那里

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

不管怎样,你说“ET”不起作用?我对它没有什么经验,但是如果你看一下你的文档,你应该能够想出一个算法来打印出你系统上安装的所有时区。如果EST与ET不同(是吗?),那么这将永远不起作用。您需要找出Java分配给ET时区的名称,并使用这些名称创建日期格式化程序


诀窍是使用LocaleX的日期格式化程序解析输入(在LocaleX中),然后在计算中使用日期(总是UTC,所以可以说是时区中立的)。然后再次使用具有正确区域设置的日期格式返回时区X或Y进行输出。

您可以尝试使用EDT

我知道这似乎完全违背了你在这里的意图,但如果它看到EST并试图转换为EDT,你可能会在某处进行双重调整


事实上,今天夏时制刚刚开始流行,这确实说明了时区问题。

我在任何地方都没有使用任何特别的夏时制。ET返回与GMT相同的输出。我的来源在ET中,无法在服务器上更改。EST直到今天都显示了正确的输出。如果您的源在ET中,并且与EST不同,那么为什么这会起作用?您是使用格式化程序解析源代码还是输出源代码?如果您使用错误的区域设置进行解析,则可能会出现问题。找出Java如何调用“ET”并使用该名称。或者更好的是,给我们一个完整的例子来说明这个问题。如果需要,请硬编码源日期。我们现在讨论的是抽象的问题。举个例子会很快把事情弄清楚。我正在使用代码将ET时间转换为本地时间。ET-EST在冬天(直到昨天),所以它当时起作用了。我还没有发现Java是如何调用ET的。这一行代码是最重要的。如果我的资料来源是格林威治标准时间,我用“格林威治标准时间”替换了其中的“EST”,那么它就会起作用。。我只需要知道Java是如何调用ET的。它肯定有名字!:)答案是“美国/纽约”!为什么他们不干脆把它命名为ET呢?你说得对,夏令时问题是从今天开始的。不幸的是,EDT没有帮助。将其设置为“本地时间”在默认情况下不是已经完成了吗?如果没有,请尝试:setTimeZone(TimeZone.getTimeZone(Calendar.getInstance().getTimeZone().getDisplayName(false,TimeZone.SHORT));