我住在东侧的北卡罗来纳州,顺便说一句。因此,我编译并运行此代码,并打印出相同的内容。该文档说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。