java欧洲/明斯克时区问题



我编写了以下程序:

import sun.security.action.GetPropertyAction;
import java.security.AccessController;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
public class Main {
    public static void main(String[] args) {
        System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss Z").format(new Date()));
        System.out.println(TimeZone.getDefault().getDisplayName());
        String country =AccessController.doPrivileged(new GetPropertyAction("user.country"));
        System.out.println(country);
        String javaHome=AccessController.doPrivileged(new GetPropertyAction("java.home"));
        System.out.println(javaHome);
    }
}

然后我在电脑上设置了GMT+3欧洲/明斯克时区。

如果我用JDK6最新版本运行这个程序,我会发现它显示我在Java的时区是委内瑞拉标准时间GMT+4.30如果我在最新发布的JDK7上运行它,它会显示巴西时区GMT-3,如果我在最新发布的JDK8上运行它,它会显示莫斯科时间GMT+3。如果我在Win7计算机上选择伏尔加格勒GMT+3时区,该程序在所有版本的java中都能正常工作。那么,这是JDK中明斯克时区的一个错误吗?

问题的原因是,直到2014年,还没有专门的欧洲/明斯克时区(至少在Windows中是这样)。

它是在2011年和2014年俄罗斯和白俄罗斯的几项夏令时和时区法律发生变化后才出现的。

请参阅相应的JDK-8017129和JDK-8067758问题。

在最新的java版本中已经考虑到了这些变化。较旧的JDK和JRE可能需要通过时区更新工具进行修补。

操作系统时区设置也必须更新。在Windows的情况下,这意味着您需要安装KB2570791和至少KB2998527修补程序。

还有一种替代方法,不需要上述补丁。只需在所需工具的java命令行参数中或全局硬编码-Duser.timezone=GMT+3。在下一个法规改变之前,这将一直有效。)

但切换到最新的Java8也将受益于稳定性和性能的提高。

相关内容

  • 没有找到相关文章

最新更新