java - Calendar的add方法中的DAY_OF_MONTH参数和DAY_OF_YEAR参数有什么区别?
怪我咯
怪我咯 2017-04-17 16:41:59
0
1
437

比如,

calendar.add(Calendar.DAY_OF_MONTH, amount);
calendar.add(Calendar.DAY_OF_YEAR, amount);

如上,有何区别?

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回覆(1)
黄舟

簡單來說,沒差別。

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
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.

所以我覺得這兩個方法呼叫沒有差別,即便 amount 超出了 day_of_month 的範圍,這個方法也會正確處理。
不過從可讀性考慮,還是用適當的參數比較好。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!