カレンダーがandroid.util.GregorianCalendar:c.add(Calendar.DAY_OF_MONTH、1)がロールバックまたは転送されますか?
c.add(Calendar.DAY_OF_MONTH, 1);
同じ月、7月の始めにCセット、またはそれが来月にcを進めていきますので、月の最後の日(たとえば7月31日の)上にある場合は、 8月?
カレンダーがandroid.util.GregorianCalendar:c.add(Calendar.DAY_OF_MONTH、1)がロールバックまたは転送されますか?
c.add(Calendar.DAY_OF_MONTH, 1);
同じ月、7月の始めにCセット、またはそれが来月にcを進めていきますので、月の最後の日(たとえば7月31日の)上にある場合は、 8月?
ルック:
add(f, delta)
は、フィールドにdelta
を追加しますf
。これは、ルール1:を使用して
set(f, get(f) + delta)
を呼び出すのと同じです。コールの前にフィールドf
の値からフィールドf
の値を引いたものがに発生したオーバーフローをモジュロにして、delta
になります。 オーバーフローは、フィールド値がその範囲を超えたときに発生し、結果として次の大きいフィールドが増分されてまたは増分され、フィールド値がその範囲に戻されます。
のでadd(Calendar.DAY_OF_MONTH, 1)
8月の第一に7月31日に変更されます。
は対照的に、ドキュメントが続く:
roll(f, delta)
が大きいフィールドを変更せずにf
をフィールドするdelta
を追加します。これは、add(f, delta)
を次の調整で呼び出すのと同じです。ロールルール。 大きなフィールドは、コール後も変更されません。大きなフィールドは大きな時間単位を表します。
DAY_OF_MONTH
は、HOUR
より大きいフィールドです。
のでroll(Calendar.DAY_OF_MONTH, 1)
7月の第一に7月31日に変更されます。
カレンダーオブジェクトの月は0から始まるので、1は2月を意味します。そして、あなたは最後の2月が28であることを知っているので、出力は3月2日でなければなりません。 "フィールド操作" という名前のセクション(強調鉱山)でスーパーjava.util.Calendar
の文書化、で
0 = January = Calendar.JANUARY
1 = february = Calendar.FEBRUARY
ので
Calendar calendar = new GregorianCalendar();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); // Jan = 0, not 1
ありがとうございます。おそらく、replを欠いているjavaにはいくつかの利点があります。私は、あなたの回答から、私がテストから得たことをもっと学びました。ロール方法について知っておくと良いことです。 – kjl