我的系统时钟目前显示时间为上午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上,如果这有任何区别。
答案 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分钟前的时间。解决方案是在检查时间之前始终确保实例正确。