我使用以下代码将时间转换为本地时间。它本来是"准点"运行的,但今天却提前了一个小时。
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("EST"));
用"ET"代替"EST"不起作用。
如何更正转换后的时间?
谢谢!
您只显示创建SimpleDateFormat的代码,所以显然您确定问题在那里?
调试日期/时间/时区/夏令时相关问题可能非常困难,因为很难"看到"实际日期;当你检查它时,Date的toString方法会做一些自己的时区转换(基于当前地区)。因此,我发现将所有输入转换为UTC,然后在UTC语言环境中打印出来是最容易的。
不管怎样,你说'ET'不起作用?我对此没有什么经验,但是如果您查看TimeZone的文档,您应该能够想出一个算法来打印系统上安装的所有时区。如果EST不同于ET(是吗?),那么这将永远行不通。您需要找出Java分配给ET时区的名称,并使用这些名称来创建日期格式化程序。
技巧是使用区域X的日期格式化程序解析输入(在区域X中),然后在计算中使用date(它总是在UTC中,因此可以说与时区无关)。然后通过再次使用具有正确区域设置的日期格式,只返回到时区X或Y进行输出。您可以尝试使用EDT。
我知道这似乎与你在这里想做的完全相反,但是如果它看到EST并试图转换为EDT,你可能会在某个地方进行双重调整。
今天刚刚开始实行夏令时的事实确实指向了时区问题。