Berechnung der Unterschiede zwischen zwei Daten in Java 6.0 und früher kann trügerisch schwierig wegen der Notwendigkeit zur Aufnahme von Schaltjahren , Schaltsekunden , Sommerzeit Zeiten und andere Anpassungen regelmäßig in den Kalender in den meisten Ländern. Dieses Tutorial bietet zwei Lösungen , eine, die nicht für Situationen, in denen DST oder Schaltjahre ernste Probleme und eine differenziertere Option auf der JSR -310 -Bibliothek basiert verursachen können, sollten verwendet werden. Diese Bibliothek ist geplant , einen Teil der Java 7.0 API sein, wenn es Ende 2010 freigegeben wird. Allerdings kann es für die Verwendung heruntergeladen Jetzt werden. Things You
Computer Java
JSR -310 (optional)
brauchen anzeigen Weitere Anweisungen
Mit Java 6.0 Werkzeuge
1
erstellen neue Klasse mit dem Namen " DateDifferencer " und der Dateiname " DateDifferencer.java . " Gib ihm die folgenden Skelett :
/*** Diese Klasse werden zwei Methoden zum Auffinden von Unterschieden zwischen Daten bieten: * - Eine native Methode , die nicht angemeldet für Schaltjahre und andere Merkwürdigkeiten Datum * aber die kompatibel ist mit der neuesten Version von Java, wie von Anfang 2010 * - . . Eine anspruchsvollere Version, die die externen JSR -310 Bibliothek , * die in Java 7 aufgenommen werden verwendet , soll Ende 2010 veröffentlicht werden ** @ author Kevin Walker * /public class DateDifferencer { }
Alles andere wird in dieser Klasse Skelett gehen .
2
Berechnen Sie die Anzahl der Millisekunden an einem Tag und speichern sie in eine Konstante für die spätere Verwendung. Dies ist notwendig, da Java 6.0 und früheren Versionen Zeit verstehen nativ in Millisekunden oder Nanosekunden.
/*** Die Anzahl der Millisekunden an einem Tag gleich 1000 Millisekunden pro Sekunde * 60 Sekunden pro Minute * 60 Minuten pro ist Stunde * 24 Stunden am Tag * /Tablet
public final static double MILLISECONDS_IN_DAY = 1000 * 60 * 60 * 24;
3
erstellen Sie die " findDifference "-Methode. Stellen Sie sicher, dass die Javadoc-Kommentar die Schwäche in dem Verfahren für alle anderen , die es nutzen wählt fest .
/*** Diese Klasse verwendet eine einfache Methode, um die Differenz zwischen zwei Daten berechnen. * Allerdings ist es nicht makellos. Ungenauigkeiten kann wegen der Schaltjahre führen. ** @ Return die Anzahl der Tage zwischen den beiden Daten ohne Korrektur für Schaltjahr oder Sommerzeit ändert. * /Public static double findDifference ( Datum d1, d2 Datum ) {
< p > double diff = Math.abs ( d2.getTime () - d1.getTime ());
Doppel Tage = diff /MILLISECONDS_IN_DAY ;
Rückkehr Tage;
}
Dies funktioniert durch die Suche nach dem Unterschied zwischen den beiden Daten in Millisekunden . Es teilt sich dann , dass durch die Anzahl der Millisekunden in einem Tag ( die Sie in Schritt 2 berechnet ) .
JSR -310
4
Orten mit der JSR -310 Zeit " jar" -Datei im gleichen Verzeichnis wie der Rest des Programms .
5
Fügen Sie ein paar mehr Importe um Ihre DateDifferencer Klasse , so dass Sie Zugriff auf die JSR 310 -Bibliothek haben kann.
< p > Import javax.time.Duration , Import javax.time.period.Period ; .
6
neuen Methode, um Ihre DateDifferencer Klasse
/*** @ return ein String beschreibt den Unterschied zwischen den beiden Daten * /public static String findDifferenceWithJSR ( Datum Beginn , Datum Ende ) { duration = Dauer Duration.durationBetween ( Beginn, Ende ); . Zeitraum diff = Period.nanos ( duration.toNanos ()); return new diff.toString ();}
Dies schafft eine "Dauer" -Objekt, das den Unterschied zwischen den beiden Daten hält . Man konnte es stoppen und die Dauer der " toString "-Befehl. Jedoch stellt dies die Antwort in Sekunden , das ist nicht lesbar . So ist es dann eine "Periode" Objekt und nutzt seine " toString "-Befehl.