我知道add()
根據日曆的規則將指定(簽名)的時間量添加到給定的時間字段。日曆add()vs roll()我們什麼時候使用它?
而roll()
在給定時間字段上添加指定的(有符號)單個時間單位,而不更改較大的字段。
我想不到roll()
的日常用法我會盡全力通過add()
。
你能幫我解決一些例子嗎我們什麼時候使用roll()
和add()
?
編輯1
喬達答案是不能接受的!
我知道add()
根據日曆的規則將指定(簽名)的時間量添加到給定的時間字段。日曆add()vs roll()我們什麼時候使用它?
而roll()
在給定時間字段上添加指定的(有符號)單個時間單位,而不更改較大的字段。
我想不到roll()
的日常用法我會盡全力通過add()
。
你能幫我解決一些例子嗎我們什麼時候使用roll()
和add()
?
編輯1
喬達答案是不能接受的!
add()
- 幾乎總是如你所說roll()
- 比如你要在一個月到「分配」事件。算法可能需要進行數天並放置事件,然後繼續進行。當月底達到時,應該從頭開始。因此roll()
。發現在jGuru
- Calendar.roll()
改變特定單元 和葉 '放大'(在時間 - 月而言 比天 '放大')單元不變。該API的例子是 , 滾滾(的Calendar.MONTH,8)產生 4月30日,1999年也就是1999年給出的8月31日的日期,這一天被 改變,以滿足四月份的最高,但 的「大'單位,年,是 不變。
roll(): Rolls up 8 months here i.e., adding 8 months to Aug will result in Apr but year remains unchanged(untouched).
- Calendar.add()
會引起如果 必要 下一個 '放大' 單元改變。也就是說,給定日期 1999年8月31日,添加(Calendar.MONTH, 8)產生2000年4月30日。add()也 強制重新計算毫秒 和所有字段。
add(): Adds months to the current date i.e., adding 8 months to Aug will give Apr of Next Year, hence forces the Year change.
我只是在問同樣的問題(這是我找到了這個網頁),有人在我工作的地方(做得好,DCK)提出了一個建議:
許多智能手機(以及其他類似接口)上的日期選擇器將從第31天到第1天「滾動」而不改變月份,類似於月份字段。
我想不出另一個使用ATM,這個可以用其他方式實現,但至少它是一個例子!
Tim
這是一個不起作用的例子。環路中的情況永遠不會得到滿足,因爲一旦到達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);
}