2014-10-31 43 views
1

我有一个欧洲/莫斯科时间在我的Mageia 4java zoneinfo有什么问题?

这样

System.out.println(new java.util.Date()); 
System.out.println(System.getProperty("user.timezone")); 

回报

Fri Oct 24 13:43:22 GMT+03:00 2014 
GMT+03:00 

如果我设置系统日期在2014年10月24日

代码

且该代码返回

Sun Oct 26 14:44:26 GMT+03:00 2014 
GMT+03:00 

如果我在26.10.2014设置系统日期

以我的观点来看,它是java zoneinfo系统的错误行为。 我下载了tzupdater并运行它,文件Europe/Moscow已更新,现在它的大小为705 kB。

我试试下面的代码:

TimeZone.setDefault(TimeZone.getTimeZone("Europe/Moscow")); 
       System.out.println(new java.util.Date()); 
       System.out.println(java.util.TimeZone.getDefault()); 

,并返回

Fri Oct 24 15:10:34 MSK 2014 
sun.util.calendar.ZoneInfo[id="Europe/Moscow",offset=10800000,dstSavings=0,useDaylight=false,transitions=79,lastRule=null] 

Sun Oct 26 15:32:03 MSK 2014 
sun.util.calendar.ZoneInfo[id="Europe/Moscow",offset=10800000,dstSavings=0,useDaylight=false,transitions=79,lastRule=null] 

为什么会这样?为什么在这两种情况下抵消是相同的?

+0

tzupdater显示它正在更新到哪个版本? – 2014-10-31 12:06:14

+0

挂起 - 如果你的'user.timezone'值只是“GMT + 03:00”,那么是的,它将始终显示GMT + 03:00 ...因为它不*使用欧洲/莫斯科。所以这是'user.timezone'正在被填充的地方,而不是当前的数据库。 – 2014-10-31 12:07:39

+0

tzupdater在2014i版本中更新区域。 – wolandec 2014-10-31 12:27:12

回答

2

问题纠正时间,以及通过将正确的时区的定义来解决。

TimeZone.setDefault(TimeZone.getTimeZone("Europe/Moscow")); 
+0

这种方法仍然适合你吗?因为我猜我们遇到了同样的问题,并且我尝试了您的解决方案,但它对我无效,仍然需要一小时... – tonix 2014-12-13 20:43:01

+0

您是否更新了java时区? – wolandec 2014-12-14 21:18:49

+0

是的,我发表了评论后做了它,现在它的工作! :) – tonix 2014-12-14 21:30:09

0

你的第二个试验(2014年10月26日)是改变冬季后,所以你可能需要通过-1小时