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