Java 日历添加小时问题以毫秒为单位获取时间
Java Calendar add hour issue getting time in millis
我这里有这个片段:
Calendar cal = Calendar.getInstance();
System.out.println("calendar " + cal.getTime());
System.out.println("ms calendar" + cal.getTime().getTime());
long ms0 = cal.getTime().getTime();
cal.add(Calendar.HOUR, -1);
System.out.println("calendar one hour less " + cal.getTime());
System.out.println("ms calendar one hour less " + cal.getTime().getTime());
long ms1 = cal.getTime().getTime();
cal.setTimeInMillis(t0-t1);
System.out.println("result " + cal.getTime());
我原以为两个日期之间只有一小时的差异。
相反,我得到了这个奇怪的结果:
calendar Wed Sep 23 09:51:36 CEST 2015
ms calendar 1442994696681
calendar one hour less Wed Sep 23 08:51:36 CEST 2015
ms calendar one hour less 1442991096681
result Thu Jan 01 02:00:00 CET 1970
我哪里错了?
正如我在日期中看到的那样,我应该如何获得一小时的差异?
如有任何帮助,我们将不胜感激。
提前致谢。
System.out.println("milis restantes:"+ (ms0-ms1));
结果:
milis restantes:3600000
您的程序运行正常
编辑:
对于您编辑的问题,您需要了解 Calendar 从 epoch 开始计算 milis,在这种情况下 是:
1 月 1 日星期四 01:00:00 CET 1970
所以在这个日期上加一个小时会导致
1 月 1 日星期四 02:00:00 CET 1970
如果您想检查此行为:
cal.setTimeInMillis(0);
System.out.println("result new Calendar " + cal.getTime());
结果:
result new Calendar Thu Jan 01 01:00:00 CET 1970
我这里有这个片段:
Calendar cal = Calendar.getInstance();
System.out.println("calendar " + cal.getTime());
System.out.println("ms calendar" + cal.getTime().getTime());
long ms0 = cal.getTime().getTime();
cal.add(Calendar.HOUR, -1);
System.out.println("calendar one hour less " + cal.getTime());
System.out.println("ms calendar one hour less " + cal.getTime().getTime());
long ms1 = cal.getTime().getTime();
cal.setTimeInMillis(t0-t1);
System.out.println("result " + cal.getTime());
我原以为两个日期之间只有一小时的差异。 相反,我得到了这个奇怪的结果:
calendar Wed Sep 23 09:51:36 CEST 2015
ms calendar 1442994696681
calendar one hour less Wed Sep 23 08:51:36 CEST 2015
ms calendar one hour less 1442991096681
result Thu Jan 01 02:00:00 CET 1970
我哪里错了? 正如我在日期中看到的那样,我应该如何获得一小时的差异?
如有任何帮助,我们将不胜感激。 提前致谢。
System.out.println("milis restantes:"+ (ms0-ms1));
结果:
milis restantes:3600000
您的程序运行正常
编辑:
对于您编辑的问题,您需要了解 Calendar 从 epoch 开始计算 milis,在这种情况下 是:
1 月 1 日星期四 01:00:00 CET 1970
所以在这个日期上加一个小时会导致
1 月 1 日星期四 02:00:00 CET 1970
如果您想检查此行为:
cal.setTimeInMillis(0);
System.out.println("result new Calendar " + cal.getTime());
结果:
result new Calendar Thu Jan 01 01:00:00 CET 1970