現在、日付が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にジャンプします)?
Calendar.DATE
フィールドに1を追加すると、月末に達したときに月もインクリメントする必要があるため(5月の場合は31)、記述しても意味がありません。それをデバッグし、日の値が実際にあなたが思っているものであることを確認してください
あなたは私の友人の2つの簡単な方法でこれを簡単に行うことができます。最初のものは:
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, 1);
2つ目は次のとおりです。
Calendar cal = Calendar.getInstance();
cal.add(Calendar.HOUR_OF_DAY, 24);
このことを見つけたいと思います。ありがとう。
これもうまくいくはずです。
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());
}
私は間違っているようです!APIによると、ロールは特定のフィールドのみを更新します!
カレンダーに日を追加する場合は、
cal.roll(Calendar.DATE, 1);
これはオーバーフローすると月と年をインクリメントします
カレンダーのどの実装を使用していますか?それは他のみんなのために働くように見えるので...
これは答えではなく、単なる手がかりです。DSTが日付の間に開始されたときに発生することがわかりました。多分それはあなたの場合です...
例:ブラジルのDSTは、今年「Sun Oct 20 00:00:002013」に開始されました。
Calendar cal = Calendar.getInstance(); // today = Sat Oct 19 00:00:00 BRT 2013
cal.add(Calendar.DATE, 1); // = Sat Oct 19 23:00:00 BRT 2013
残念ながら、私はまだそれを回避する方法を知りません。
確認したところ、正常に追加されました。私のコードと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