2016-07-16 10 views

答えて

1

ルック:

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

ありがとうございます。おそらく、replを欠いているjavaにはいくつかの利点があります。私は、あなたの回答から、私がテストから得たことをもっと学びました。ロール方法について知っておくと良いことです。 – kjl

0

カレンダーオブジェクトの月は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 
関連する問題