根据我对roll()
方法的理解,我预计下面的代码会从当前时间减去140小时。但它似乎减去了20个小时。这不是正确的方法吗?
Calendar rightNow = Calendar.getInstance();
rightNow.roll(Calendar.HOUR, -140);
答案 0 :(得分:8)
根据java docs,roll
方法不会更改较大字段,它会将小时值滚动到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/。