如何从日历实例中减去小时数

时间:2013-06-26 19:40:51

标签: java

根据我对roll()方法的理解,我预计下面的代码会从当前时间减去140小时。但它似乎减去了20个小时。这不是正确的方法吗?

Calendar rightNow = Calendar.getInstance();
rightNow.roll(Calendar.HOUR, -140);

3 个答案:

答案 0 :(得分:8)

根据java docsroll方法不会更改较大字段,它会将小时值滚动到0到23之间。

所以在你的情况下,考虑到HOUR_OF_DAY,140实际上被认为是(24 * 5)+ 20 = 140.现在因为它没有改变更大的字段,所以“小时”被回滚24小时5次,这使得它恢复在同一时间然后它将它回滚20个小时。

要实现“真正的”140小时回滚,你可以像 -

那样做
    Calendar rightNow = Calendar.getInstance();
    rightNow.add(Calendar.HOUR, -140);

答案 1 :(得分:2)

如果将日期存储在名为“rightNow”的Calendar对象中,则可以使用以下代码:

Calendar rightNow = Calendar.getInstance();
rightNow.add(Calendar.HOUR_OF_DAY, -numberOfHours);

其中:

  

numberOfHours:是您要减去的小时数。

答案 2 :(得分:0)

Roll取决于实施,请参阅http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#roll%28int,%20int%29

可能您的默认实施最多滚动一天。而是使用GregorianCalendar或Joda http://joda-time.sourceforge.net/