我们正在使用日历.滚动以向上或向下移动日期.javadoc提到更大的字段没有被修改(即如果我们将日期从月的第一天开始向左移动5,不幸的是,calendar.getTime()不会得到上个月的值) .月份值保持不变,如何更改此行为.我真的想要适当地移动日期值.(例如,如果我在2010年8月1日向左移动了5天 - 我希望看到2010年6月27日而不是2010年8月27日).我在这里错过了什么?
由于滚动规则检查,您将需要使用add(Calendar.DATE, -5)方法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原来设置为周日6月6日,1999年呼叫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设置为星期二,与星期日最接近的可能值(星期日是一周的第一天).