Blick in die Dokumentation der Ober java.util.Calendar
, in dem Abschnitt "Feld Manipulation" (Hervorhebung von mir):
add(f, delta)
fügt delta
auf Feld f
. Dies entspricht dem Aufruf von set(f, get(f) + delta)
mit zwei Einstellungen:
Regel 1 hinzufügen 1. Der Wert von Feld f
nach dem Anruf abzüglich des Werts von Feld f
vor dem Anruf ist delta
, modulo jeder Überlauf, der in Feld f
aufgetreten ist. Überlauf tritt auf, wenn ein Feldwert seinen Bereich überschreitet, und als Ergebnis wird das nächstgrößere Feld inkrementiert oder dekrementiert und der Feldwert wird wieder in seinen Bereich eingestellt.
So wird add(Calendar.DAY_OF_MONTH, 1)
31. Juli ändern 1. August.
Im Gegensatz dazu setzt die Dokumentation:
roll(f, delta)
delta
f
Feld fügt ohne größere Felder zu ändern. Dies entspricht dem Aufruf add(f, delta)
mit folgender Einstellung:
Rollregel. Größere Felder sind unverändert nach dem Anruf. Ein größeres Feld repräsentiert eine größere Zeiteinheit. DAY_OF_MONTH
ist ein größeres Feld als HOUR
.
So wird roll(Calendar.DAY_OF_MONTH, 1)
31. Juli ändern 1. Juli.
Danke. Vielleicht gibt es einen gewissen Vorteil für Java, dem ein Replikat fehlt. Ich habe mehr von Ihrer Antwort erfahren, die ich von den Tests bekommen würde. Es ist auch gut über die Roll-Methode zu wissen. – kjl