向指定日历字段添加有符号的时间量,不更改更大的字段。负的波动量表示从字段减去时间量,不更改更大的字段。如果指定的量为 0,则此方法不执行任何操作。
此方法在添加时间量前调用 calendar.complete()
,使得所有的日历字段都标准化。如果任何日历字段在 non-lenient
iis7站长之家下具有超出范围的值,则抛出 illegalargumentexception
。
示例:考虑原来设置为 1999 年 8 月 31 日的 gregoriancalendar
。现在调用 roll(calendar.month, 8)
将该日历设置为 1999 年 4 月 30 日。如果使用 gregoriancalendar
,则 4 月份的 day_of_month
字段不可能为 31。将 day_of_month
设置为最可能接近的值 30。year
字段保持为值 1999,因为它是一个比 month
更大的字段。
示例:考虑原来设置为 1999 年 6 月 6 日星期日的 gregoriancalendar
。现在调用 roll(calendar.week_of_month, -1)
将该日历设置为 1999 年 6 月 1 日星期二,而调用 add(calendar.week_of_month, -1)
则将日历设置为 1999 年 5 月 30 日星期日。这是因为上升和下降规则施加了其他的约束:week_of_month
改变时 month
必须不变。根据添加规则 1,所得日期必定在 6 月 1 日星期二和 6 月 5 日星期六之间。根据添加规则 2,day_of_week
(在改变 week_of_month
时它是一个不变量)被设置为 tuesday,是最接近 sunday 的可能值(其中星期日是一个星期的第一天)。
- 覆盖:
- 类
calendar
中的 roll
- 参数:
field
- 日历字段。amount
- 添加到 field
的有符号时间量。
- 抛出:
illegalargumentexception
- 如果 field
为 zone_offset
、dst_offset
或未知,或者任何日历字段在 non-lenient 模式下具有超出范围的值。- 从以下版本开始:
- 1.2
- 另请参见:
roll(int,boolean)
,
add(int,int)
,
calendar.set(int,int)