Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Calendar.get(Calendar.HOUR)返回的值与系统时钟时间不同?_Java_Serialization - Fatal编程技术网

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

Java Calendar.get(Calendar.HOUR)返回的值与系统时钟时间不同?,java,serialization,Java,Serialization,我的系统时钟当前显示时间为上午9:54。但是,如果我执行以下操作: Calendar cal = Calendar.getInstance(); System.out.println("Now: " + cal.get(Calendar.AM_PM) + " , " + cal.get(Calendar.HOUR) + " , " + cal.get(Calendar.MI

我的系统时钟当前显示时间为上午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。

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

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

我的类的日历成员每次也被序列化并从文件中加载,这就是为什么自文件上次保存时的上午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分钟前的时间。解决方法是在检查时间之前始终正确获取实例。

您是否考虑过使用
日历。一天中的小时数
小时数
一天中的小时数
为我获取正确的结果。您是否尝试过检查
区域设置
?这可能与您的时区设置有关。