有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

即使我设置了时区,为什么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. # 1 楼答案

    我已经找到了解决这个问题的方法

    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,这是莫斯科当前的正确时间,不需要额外的一小时