calender.get(Calendar.HOUR)返回的值与系统时钟时间不同?

时间:2014-01-06 04:58:32

标签: java serialization

我的系统时钟目前显示时间为上午9:54。但是,如果我执行以下操作:

Calendar cal = Calendar.getInstance();
System.out.println("Now: " 
                    + cal.get(Calendar.AM_PM) + " , " 
                    + cal.get(Calendar.HOUR) + " , "
                    + cal.get(Calendar.MINUTE));

我得到了输出:

Now: 0 , 7 , 53

因此AM / PM值正确,分钟正确,但小时返回的时间与系统时钟不同。

造成这种情况的原因是什么?我在Linux上,如果这有任何区别。

1 个答案:

答案 0 :(得分:2)

我遇到了问题,这是我的错。

我正在序列化这个类,将它保存到一个文件中,然后反序列化它并在每次程序启动时从文件中加载它。

我的班级的日历成员也每次都被序列化并从文件中加载,这就是为什么从上次保存文件到上午7点以来小时没有更新的原因:

public class Foo implements Serializable
{
   private final Calendar cal = Calendar.getInstance();
}

我已将此变量更改为静态,即:

public class Foo implements Serializable
{
   private final static Calendar cal = Calendar.getInstance();
}

因为静态变量似乎没有被序列化,现在一切正常。

编辑:进一步测试显示,即使你在程序启动时加载日历,它的时间也不会每秒更新,所以如果加载程序,5分钟后尝试获取当前时间,你将获得从5分钟前的时间。解决方案是在检查时间之前始终确保实例正确。