日历add()vs roll()我们什么时候使用它?
我知道add()
根据日历的规则将指定的(有符号的)时间量添加到给定的时间字段。
roll()
在给定的时间域上添加指定的(有符号的)单个时间单位, 而不改变更大的域。
我不能想到roll()
的日常用法我会通过add()
来做所有事情。
当我们使用roll()
和add()
时,你能用例子来帮助我吗?
编辑1
乔达的答案不被接受!
-
add()
– 几乎总是如你所说 -
roll()
– 例如你想在一个月内“分配”事件。 该algorithm可能需要进行数天并放置事件,然后继续。 当月底达到时,应该从头开始。 因此roll()
。
在jGurufind
- Calendar.roll()
改变一个特定的单位,并保持“较大”(在时间月比“一天比较大”)单位不变。 API的例子是1999年8月31日的date,1999年4月30日(Calendar.MONTH,8)产生的收益率。也就是说,DAY被改变为满足4月份的最大值,但“更大”的单位YEAR,没有变化。
roll(): Rolls up 8 months here ie, adding 8 months to Aug will result in Apr but year remains unchanged(untouched).
- Calendar.add()
如有必要,将导致下一个“大型”单位发生变化。 也就是说,给定1999年8月31日的date,2000年4月30日添加(Calendar.MONTH,8)。add()还强制重新计算毫秒和所有字段。
add(): Adds months to the current date ie, adding 8 months to Aug will give Apr of Next Year, hence forces the Year change.
我只是问了同样的问题(我是如何find这个页面的),在我工作的地方有一个人(干得好,DCK)提出了一个build议:
许多智能手机(和其他类似接口)上的dateselect器将从第31日到第1日“滚动”,而不改变月份,类似于月份字段。
我想不出另外一个使用自动柜员机,这个可以用其他方式来实现,但至less这是一个例子!
蒂姆
这是一个不起作用的例子。 回路中的状况将永远不会得到满足,因为一旦到达2014年1月31日,回滚到2014年1月1日。
Calendar start=new GregorianCalendar(); start.set(Calendar.YEAR, 2014); start.set(Calendar.MONTH, 0); start.set(Calendar.DAY_OF_MONTH, 1); //January 2, 2014 Calendar end=new GregorianCalendar(); end.set(Calendar.YEAR, 2014); end.set(Calendar.MONTH, 1); end.set(Calendar.DAY_OF_MONTH, 2); //February 2, 2014 while (start.getTime().before(end.getTime())){ start.roll(Calendar.DATE, 1); }