Jahr zum Java-Kalender hinzufügen funktioniert nicht

7

Bitte erleuchte mich dabei:

Ich versuche einfach 10 Jahre zum aktuellen Datum hinzuzufügen und dann ein Ablaufdatum davon abzuziehen, um die Anzahl der Jahre zurückzugeben:

%Vor%

Wenn ich das debugge, bleibt der Kalender immer im aktuellen Jahr.

Jeder?

    
codea 07.10.2010, 15:19
quelle

6 Antworten

11

Sie haben ein Problem mit der int / long-Konvertierung: 365 * 24 * 60 * 60 * 1000 Was zu 31536000000 auswertet und daher Integer.MAX_VALUE 2147483647 überschreitet Das funktioniert:

%Vor%     
stacker 07.10.2010, 15:29
quelle
5

Ihre Berechnung von max ist falsch. Ein int kann kein Jahr in Millis halten.

Ersetzen Sie es stattdessen durch

%Vor%

Oder besser: JodaTime :

%Vor%     
BalusC 07.10.2010 15:27
quelle
3

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!

    
Bryan James 07.10.2010 15:32
quelle
1

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); ?

    
Paul Tomblin 07.10.2010 15:23
quelle
1

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 ...

    
Anon 07.10.2010 15:37
quelle
0

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.

    
jarnbjo 07.10.2010 15:32
quelle

Tags und Links