20

現在、日付が 5 月 28 日であるとします。次のコマンドを順番に呼び出すと、出力は次のようになります

cal.add(Calendar.DATE, 1);  // Day = 29
cal.add(Calendar.DATE, 1);  // Day = 30
cal.add(Calendar.DATE, 1);  // Day = 31
cal.add(Calendar.DATE, 1);  // Day = 31
cal.add(Calendar.DATE, -1); // Day = 29

これが次の月にジャンプしないのはなぜですか?では、なぜ 31 日に止まっているのでしょうか (しかし、1 を引くと 29 にジャンプします)。

4

6 に答える 6

33

これは、2 つの簡単な方法で簡単に行うことができます。最初のものは次のとおりです。

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, 1);

2つ目は次のとおりです。

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.HOUR_OF_DAY, 24);

私はあなたがこれを見つけたいと思うと思います。ありがとう。

于 2013-12-30T13:15:53.073 に答える
19

フィールドに1 を追加するとCalendar.DATE、月末 (5 月の場合は 31) に達すると月もインクリメントされるため、書いた意味がなくなります。それをデバッグし、日の値が実際にあなたが考えているものであることを確認してください

于 2012-08-09T11:16:58.410 に答える
4

これもうまくいくはずです。

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_YEAR, 1);

以下で動作をテストできます。

for (int i = 0; i < 365; i++) {
    cal.add(Calendar.DAY_OF_YEAR, 1);
    System.out.println(cal.getTime().toString());
}
于 2016-05-18T05:33:44.890 に答える
2

私が間違っているようです!APIによると、ロールは特定のフィールドのみを更新します!

カレンダーに日を追加する場合は試してみてください

cal.roll(Calendar.DATE, 1);

オーバーフローすると、これは月と年をインクリメントします

于 2012-08-09T11:18:11.223 に答える
0

確認したところ、正常に追加されました。私のコードとo/pを見てください:

Calendar  cal = Calendar.getInstance(); // today is 09-Aug-2012

for(int i=0;i<23;i++) {
    cal.add(Calendar.DATE, 1);  
}
System.out.println(cal.get(Calendar.DAY_OF_MONTH));

O/p

1

于 2012-08-09T11:17:22.847 に答える