Alter berechnen mit java

Ich denke da wird jeder sagen: Verwende Joda-Time!
Denn z.B.:
http://joda-time.sourceforge.net/faq.html#datediff

Korrekt :)
Das wird in Java 8 in ähnlicher Form auch die neue Datum/Zeit API werden :)

Trotzdem sollte es auch mit den im JRE enthaltenden Mitteln gehen.

Hier mal ein Versuch:

Java:
        Calendar dateMarch = new GregorianCalendar(1956,Calendar.MARCH,17);
        long diffMillis = System.currentTimeMillis()  - dateMarch.getTimeInMillis();
        
        DatatypeFactory datatypeFactory = DatatypeFactory.newInstance();
        Duration duration = datatypeFactory.newDuration(diffMillis);
        System.out.println(duration);
        System.out.println(duration.getYears());

Es ist sicherlich nicht 100% genau. Ggf. muss man noch die Zeitzone oder so miteinbeziehen.

Die XML-Datentypen, die inzwischen im JRE standardmäßig drin sind, benutze ich dabei zur leichteren Konvertierung der Millisekunden in die Jahre, Monate usw. . Die DatatypeFactory braucht man nur einmal initialisieren und die Exception kann man fangen und eine RuntimeException werfen, da diese in einem gesunden System eh nicht auftreten wird.

P.S.: Calendar kann schon mit Daten vor 1970 umgehen. Da sind die Millisekunden einfach negativ dann. Auch wenn damals die Zeitrechnung sich hin und wieder geändert wurde.
 
Zurück