Java.util.Date:尝试更多地了解UTC和ET

Tha*_*ham 4 java timezone date

我住在北卡罗来纳州,顺便说一句,这是在东边.所以我编译并运行这段代码并打印出同样的东西.文档说java.util.date尝试反映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));   
Run Code Online (Sandbox Code Playgroud)

这就是我得到的

UTC: 11/05/11 11:14 AM
ET: 11/05/11 11:14 AM
Run Code Online (Sandbox Code Playgroud)

但是,如果我去这个网站它试图反映所有不同的时间,UTC和ET是不同的.我在这里做错了什么

Jon*_*eet 7

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

我相信北卡罗来纳州最好的奥尔森时区名称是"America/New_York".

请注意,您不应该只将时区的原始偏移量添加到UTC时间 - 您应该设置格式化程序的时区.一个Date值并不真正了解时区......自1970年1月1日UTC以来,它总是只有几毫秒.

所以你可以使用:

import java.text.; import 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));
Run Code Online (Sandbox Code Playgroud)

输出:

Eastern: 11/05/11 11:30 AM EDT
UTC: 11/05/11 3:30 PM UTC
Run Code Online (Sandbox Code Playgroud)

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