Java日历以毫秒为单位添加小时问题

时间:2015-09-23 08:58:22

标签: java date time calendar

我在这里有这个片段:

    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

我错了什么? 正如我在日期中看到的那样,我应该如何获得一小时的差异?

非常感谢任何形式的帮助。 提前谢谢。

1 个答案:

答案 0 :(得分:5)

System.out.println("milis restantes:"+ (ms0-ms1));

结果:

milis restantes:3600000

您的计划正在按预期运作

修改
有了您编辑的问题,您需要了解日历开始计算来自纪元的milis,在这种情况下,女巫是: Thu Jan 01 01:00:00 CET 1970 因此,在此日期添加一小时将导致 Thu Jan 01 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