Hier ist ein einfaches Beispiel dafür, was funktionieren sollte.
%Vor%Denken Sie daran, eine lange Zeit zu verwenden, um die Zeit in Millisekunden zu erhalten!
Der Kalender ist faul, daher berechnet er möglicherweise nicht alle anderen Felder neu, bis Sie danach gefragt haben. Das hat mich schon mal im Debugger abgeworfen. Was passiert wenn Sie System.out.println(ten_year_later);
?
Ich habe in einem Kommentar angemerkt, dass Sie eine falsche Berechnung für die Anzahl von Millis in einem Jahr haben (vergesse das Int / Long-Problem).
Da Sie zwei Kalender haben, von denen jeder ein Jahr behalten kann, schreiben Sie Ihren Code so (nicht kompiliert, kann Tippfehler enthalten):
%Vor%Angenommen, das ist es, was Sie wirklich wollen ...
Die Anzahl der Millisekunden in einem Jahr liegt weit außerhalb des Bereichs von int. Daher werden sowohl die Int-Darstellung von ten_year_later.getTimeInMillis() - expiration.getTimeInMillis()
als auch die Berechnung 365 * 24 * 60 * 60 * 1000
zu falschen Werten ausgewertet.
Die ten_year_later
sollte korrekt sein. Es gibt keine Notwendigkeit, computeFields aufzurufen, wie R. Bemrose schrieb.