即使我设置了时区,为什么Java显示错误的时间(提前1小时)?

时间:2014-12-13 19:38:01

标签: java date datetime

大家好我在Java中遇到Date对象的麻烦,实际上如果我实例化一个空的Date实例:

Date date = new Date();
System.out.println("Date = " + date);

当我在莫斯科时它的价值是23:30,这里的时间是22:30。

如果我尝试使用自定义格式并使用SimpleDataFormat对象设置时区,请执行以下操作:

Date date = (Date) prop.getValue();
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, yyyy, HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("Europe/Moscow"));
System.out.println("Date = " + sdf.format(date));

我也得到1小时Date = 23:35的开销,而正确的时间是22:30。

问题是我的JVM的默认TimeZone设置正确:

System.out.println("TIMEZONE : " + TimeZone.getDefault().getID());

直接输出TIMEZONE : Europe/Moscow

实际上,问题在哪里?

编辑:我找到了解决方案,请看下面的答案。

1 个答案:

答案 0 :(得分:2)

我找到了解决此问题的方法。

1)转到http://www.oracle.com/technetwork/java/javase/downloads/tzupdater-download-513681.html

2)下载.zip,解压缩,关闭当前正在运行的所有Java应用程序,转到 tzupdater-1.4.9-2014i 文件夹

3)打开命令行shell并输入:

$ java -jar tzupdater.jar -u

可能需要Root权限。

之后,重新启动Java应用程序,现在:

 System.out.println(new GregorianCalendar().getTime());
 System.out.println(new java.util.Date());

两者都会输出Sun Dec 14 00:02:59 MSK 2014,这是莫斯科当前正确的时间,不需要额外的小时!