Anime-Otaku
Erfahrenes Mitglied
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.