61

特定の日付を1日増やしたい。次のような Cal​​endar オブジェクトを作成します。

Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2012);
cal.set(Calendar.MONTH, 0);
cal.set(Calendar.DAY_OF_MONTH, 31);

次に、それを 1 日増やすために、次の 2 つのことを行うことができます。

cal.add(Calendar.DAY_OF_MONTH, 1);

また

cal.add(Calendar.DAY_OF_YEAR, 1);

他の「DAY」定数もありますが、上記の 2 つの方法で日を 1 増やしても同じ結果が得られます。どちらの場合、2 つの結果が異なるのでしょうか?

4

11 に答える 11

60

それを追加しても実際には違いはありませんが、これは

Calendar c = Calendar.getInstance();
System.out.println(c.get(Calendar.DAY_OF_MONTH));
System.out.println(c.get(Calendar.DAY_OF_YEAR));

プリント

28
363
于 2012-12-28T06:03:28.047 に答える
10

Calendar.DATEあなたの目的のために使用してください。あなたの場合、これらの3つの定数は同義語です。

于 2012-12-28T06:01:37.940 に答える
8

add を呼び出しても違いはありません。ただし、ゲッターは異なる結果を返します:D

からのコードスニペットGregorianCalendar#add

case DAY_OF_MONTH: // synonym of DATE
 case DAY_OF_YEAR:
 case DAY_OF_WEEK:
    break;
于 2012-12-28T06:04:35.990 に答える
7
DAY_OF_YEAR

現在の年内の日番号を示すgetおよびsetのフィールド番号

DAY_OF_MONTH

月の日を示すgetおよびsetのフィールド番号。これはDATEの同義語です

日が31を超えると、違いがわかります。

于 2012-12-28T06:02:20.383 に答える
2

どちらの場合も、基本的に日付を 1 つ進めます。したがって、両方のアプローチに違いはありません。

しかし、単一のメソッドに固執することで、コードベース全体で一貫性が得られ、メンテナーはくつろいだ気分になり、おそらくランタイムもコンパイルすることでメソッド呼び出しを最適化します。

于 2012-12-28T06:40:11.980 に答える
1

実際には、選択したフィールド タイプによって違いが生じる可能性があります。

* http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html

使用モデル。

add() と roll() の動作を動機付けるには、月、日、年を表すインクリメント ボタンとデクリメント ボタンを備えたユーザー インターフェイス コンポーネントと、基礎となる GregorianCalendar を検討してください。インターフェイスに 1999 年 1 月 31 日と表示されていて、ユーザーが月の増分ボタンを押した場合、何と読むべきでしょうか? 基礎となる実装が set() を使用する場合、1999 年 3 月 3 日と表示される場合があります。より良い結果は 1999 年 2 月 28 日になります。さらに、ユーザーが月の増分ボタンをもう一度押すと、3 月 28 日ではなく 1999 年 3 月 31 日と表示されるはずです。元の日付を保存し、より大きなフィールドが影響を受けるかどうかに応じて add() または roll() を使用することで、ほとんどのユーザーが直感的に期待するようにユーザー インターフェイスを動作させることができます。

于 2012-12-28T06:08:12.810 に答える
0

日付に加えて、DAY_OF_MONTH と DAY_OF_YEAR のどちらを使用しても違いはありません。ただし、call getter を取得してそれらの 1 つを渡すと意味があります。

于 2012-12-28T06:52:58.060 に答える
0

DATE または DAY_OF_MONTH を使用してください。どちらも同じです

違いは次のとおりです。

DATE or DAY_OF_MONTH : Get and Set indicating the day of the month
DAY_OF_WEEK          : get and set indicating the week number within the current month
DAY_OF_YEAR          : get and set indicating the day number within the current ye

ソース: https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html

于 2017-04-05T09:58:15.397 に答える