ホームページ  >  に質問  >  本文

java - Calendar的add方法中的DAY_OF_MONTH参数和DAY_OF_YEAR参数有什么区别?

比如,

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

如上,有何区别?

怪我咯怪我咯2717日前443

全員に返信(1)返信します

  • 黄舟

    黄舟2017-04-17 16:43:59

    簡単に言えば、違いはありません。

    Calendar クラスの add メソッドは抽象メソッドです。このメソッドを実装する JDK には、

    という 3 つのクラスがあります。
    • java.util.JapaneseImperialCalendar

    • java.util.GregorianCalendar

    • sun.util.BuddhistCalendar

    3 番目のコードは無視し、最初の 2 つの実装クラスのみを見てください。

    というコードがあります。 リーリー

    一見したところ、ブレーク後の実行ブランチはこれら 3 つのタイプを区別しません。
    量は、次の呼び出しなど、最初のパラメータのスコープによって制限されないようです:

    calendar.add(Calendar.DAY_OF_MONTH, 100);

    最終結果の day_of_year が依然として 100 日増加していることがわかります。

    このメソッドの API で説明されている 2 つのルールは、この範囲外の状態を説明できます。

    ルール 1 を追加します。呼び出し後のフィールドの値から呼び出し前のフィールドの値を引いた値が、
    フィールドで発生したオーバーフローを除算した値になります。 オーバーフローは、フィールド値が範囲を超えたときに発生します。 、
    結果として、次に大きいフィールドが増分または減分され、
    フィールド値がその範囲内に調整されます。

    ルール 2 を追加します。小さいフィールドは不変であると予想されるが、フィールドの変更後に最小値または最大値が変化したため、

    以前の値と等しくなることが不可能である場合
    、その値は、期待される値にできるだけ近くなるように調整されます。
    フィールドは、
    DAY_OF_MONTH よりも小さい時間単位を表します。
    不変であると期待されていません。
    どのフィールドが不変であると期待されるかはカレンダー システムによって決まります。

    したがって、量が day_of_month の範囲を超えた場合でも、このメソッドは正しく処理されると思います。
    ただし、可読性の観点からは、適切なパラメータを使用する方が良いでしょう。

    返事
    0
  • キャンセル返事