我住在东侧的北卡罗来纳州,顺便说一句。因此,我编译并运行此代码,并打印出相同的内容。该文档说java.util.date尝试反射(reflect)UTC时间。

Date utcTime = new Date();
Date estTime = new Date(utcTime.getTime() + TimeZone.getTimeZone("ET").getRawOffset());
DateFormat format = new SimpleDateFormat("dd/MM/yy h:mm a");
System.out.println("UTC: " + format.format(utcTime));
System.out.println("ET: " + format.format(estTime));

这就是我得到的
UTC: 11/05/11 11:14 AM
ET: 11/05/11 11:14 AM

但是,如果我转到尝试反射(reflect)所有不同时间的website,则UTC和ET会有所不同。我在这里做错了什么

最佳答案

那是因为getRawOffset()返回0-它也对我来说是“ET”,实际上TimeZone.getTimeZone("ET")基本上返回GMT。我怀疑那不是你的意思。

我认为,北卡罗莱纳州最好的奥尔森时区名称是“America/New_York”。

请注意,您不仅应该将时区的原始偏移量添加到UTC时间,还应该设置格式化程序的时区。 Date值实际上并不了解时区……自1970年1月1日UTC以来始终只有几毫秒。

因此,您可以使用:

导入java.text .;
导入java.util .;

Date date = new Date();
DateFormat format = new SimpleDateFormat("dd/MM/yy h:mm a zzz");

format.setTimeZone(TimeZone.getTimeZone("America/New_York"));
System.out.println("Eastern: " + format.format(date));

format.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
System.out.println("UTC: " + format.format(date));

输出:
Eastern: 11/05/11 11:30 AM EDT
UTC: 11/05/11 3:30 PM UTC

我还建议您考虑使用Joda Time而不是内置库-这是一个更好的API。

09-10 08:11
查看更多