即使我设置了时区,为什么Java显示错误的时间(提前1小时)?
大家好,我对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小时的开销,而我所在的正确时间是22:30
还有一个问题是JVM的默认时区设置正确:
System.out.println("TIMEZONE : " + TimeZone.getDefault().getID());
实际输出TIMEZONE : Europe/Moscow
那么实际上,问题出在哪里呢
编辑:我找到了一个解决方案,请看下面我的答案
# 1 楼答案
我已经找到了解决这个问题的方法
1)转到http://www.oracle.com/technetwork/java/javase/downloads/tzupdater-download-513681.html
2)下载。zip,解压,关闭当前运行的所有java应用程序,转到tzupdater-1.4.9-2014i文件夹
3)打开命令行shell并键入:
可能需要Root权限
之后,重新启动Java应用程序,现在:
两者都将输出
Sun Dec 14 00:02:59 MSK 2014
,这是莫斯科当前的正确时间,不需要额外的一小时