比如,
calendar.add(Calendar.DAY_OF_MONTH, amount);
calendar.add(Calendar.DAY_OF_YEAR, amount);
如上,有何区别?
黄舟2017-04-17 16:43:59
簡單來說,沒差別。
Calendar 類別的 add 方法是個抽象方法,在 JDK 中有三個類別實作了這個方法,分別是:
java.util.JapaneseImperialCalendar
java.util.GregorianCalendar
sun.util.BuddhistCalendar
忽略第三個,只看前兩個實作類,有這麼一段程式碼:
case DAY_OF_MONTH: // synonym of DATE
case DAY_OF_YEAR:
case DAY_OF_WEEK:
break;
粗看一下,break以後的執行分支並沒有針對這三種做區別處理。
而且 amount 似乎沒有受第一個參數的範圍限制,例如呼叫:
calendar.add(Calendar.DAY_OF_MONTH, 100);
可以看到最終結果的 day_of_year 還是增加了100 天。
這個方法的 API 中所描述的兩個規則可以解釋這種超過範圍情況:
不過從可讀性考慮,還是用適當的參數比較好。Add rule 1. The value of field after the call minus the value of field
before the call is amount, modulo any overflow that has occurred in
field. Overflow occurs when a field value excurred in
field. Overflow occurs when a field value. the next larger field is incremented or decremented and the
field value is adjusted back into its range.Add rule 2. If a smaller field is expected to be invariant, but it is
所以我覺得這兩個方法呼叫沒有差別,即便 amount 超出了 day_of_month 的範圍,這個方法也會正確處理。
impossible for it to be equal to its prior value because of jus in
its to minimum or maxim after orheter leem.d, stedn be as close as possible to its expected value. A smaller
field represents a smaller unit of time. HOUR is a smaller field than
DAY_OF_MONTH. No adjustment ismaller to smal DAY_OF_MONTH。 s what fields
are expected to be invariant.