日历滚动操作不能为我提供正确的输出

时间:2010-08-23 10:25:36

标签: java calendar

我们正在使用日历。roll向上或向下移动日期。 javadoc提到更大的字段没有被修改(即如果我们将日期从月的第一天开始向左移动5,不幸的是,calendar.getTime()不会得到上个月的值) 。月份值保持不变,如何更改此行为。我真的想要适当地移动日期值。 (例如,如果我在2010年8月1日向左移动了5天 - 我希望看到2010年6月27日而不是2010年8月27日)。我在这里缺少什么?

2 个答案:

答案 0 :(得分:10)

您可以Calendar.add使用否定amount

答案 1 :(得分:7)

由于滚动规则检查,您需要使用add(Calendar.DATE, -5) method from Calendar

roll方法描述为:

  

在没有签名的情况下添加到field   改变更大的领域。否定的   滚动量意味着减去   字段没有改变更大的字段。

     

示例:考虑GregorianCalendar   原定于1999年8月31日。   致电roll(Calendar.MONTH, 8)集   日历到1999年4月30日。使用   一个GregorianCalendar,DAY_OF_MONTH   场地不能在4月31日。   DAY_OF_MONTH设置为最接近的   可能的值,30 YEAR字段   保持1999年的价值,因为它   是一个比MONTH更大的字段。

     

示例:考虑GregorianCalendar   原定于1999年6月6日星期日。   调用roll(Calendar.WEEK_OF_MONTH, -1)将日历设置为1999年6月1日星期二,而调用   add(Calendar.WEEK_OF_MONTH, -1)套   日历到1999年5月30日星期日。   这是因为滚动规则强制执行   附加约束:MONTH   WEEK_OF_MONTH时不得更改   滚了。与添加一起使用   规则1,结果日期必须是   6月1日星期二到星期六之间   6月5日。根据增加规则2,   DAY_OF_WEEK,一个不变的时候   更改WEEK_OF_MONTH,设置为   星期二,最接近的可能值   星期天(星期日是第一天   本周)。