2010-03-23 57 views
48

我知道add()根據日曆的規則將指定(簽名)的時間量添加到給定的時間字段。日曆add()vs roll()我們什麼時候使用它?

roll()在給定時間字段上添加指定的(有符號)單個時間單位,而不更改較大的字段。

我想不到roll()的日常用法我會盡全力通過add()

你能幫我解決一些例子嗎我們什麼時候使用roll()add()

編輯1

喬達答案是不能接受的!

回答

48
  • add() - 幾乎總是如你所說
  • roll() - 比如你要在一個月到「分配」事件。算法可能需要進行數天並放置事件,然後繼續進行。當月底達到時,應該從頭開始。因此roll()
24

發現在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.

6

我只是在問同樣的問題(這是我找到了這個網頁),有人在我工作的地方(做得好,DCK)提出了一個建議:

許多智能手機(以及其他類似接口)上的日期選擇器將從第31天到第1天「滾動」而不改變月份,類似於月份字段。

我想不出另一個使用ATM,這個可以用其他方式實現,但至少它是一個例子!

Tim

2

這是一個不起作用的例子。環路中的情況永遠不會得到滿足,因爲一旦到達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); 
    } 
相關問題