大家好我在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
实际上,问题在哪里?
编辑:我找到了解决方案,请看下面的答案。
答案 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
,这是莫斯科当前正确的时间,不需要额外的小时!