Wie kann man in Java Differenzen zwischen zwei Datumsangaben berechnen?
Die Joda-Bibliothek muss zunächst in der aktuellen Version unter http://joda-time.sourceforge.net/index.html heruntergeladen und wie unter Bibliothek einbinden erläutert in den Classpath eingebunden werden.
Zu Beginn werden zwei Objekte des Typs LocalDate
erzeugt. Die Klasse liefert Datums-Objekte ohne Angabe einer
bestimmten Zeitzone. Wird der Konstruktor ohne Parameter
aufgerufen, repräsentiert das Objekt das aktuelle Datum.
Alternativ kann der mehrfach überladene Konstruktor wie im
zweiten Fall auch mit numerischen Angaben zum Jahr, Monat und
Tag aufgerufen werden.
Der Vergleich findet durch die
Erzeugung eines Period
-Objektes statt, das ein Feld
mit zeitlichen Intervall-Einheiten, wie Stunden, Wochen, Jahren,
etc. enthalten kann. Die genaue Art der Intervalle wird durch
eine statische Methode des Typs PeriodType
bestimmt, die als dritter Parameter dem Period
-Konstruktior
übergeben wird. Durch entsprechende Getter-Methoden
können die Intervalle als Integer
-Werte
ausgelesen werden.
Der verbleibende Quelltext steht im Dienste der Ausgabe:
Zunächst werden die Intervall-Bezeichner daraufhin
überprüft, ob ihr zugeordneter numerischer Wert nicht
gleich 0 ist. Ist dies nicht der Fall wird der Bezeichner
sprachlich angepasst. Dann klärt die Methode compareTo()
der Klasse LocalDate
welches der beiden Daten
größer ist und passt die Ausgabe entsprechend an.
import org.joda.time.LocalDate;
import org.joda.time.Period;
import org.joda.time.PeriodType;
public class DatumsDifferenz {
public static void main(String[] args) {
calcChristmas();
}
public static void calcChristmas() {
LocalDate now = new LocalDate();
LocalDate endDate = new LocalDate(now.year().get(), 12, 24);
Period p = new Period(now, endDate, PeriodType.yearMonthDay());
int y = p.getYears();
int m = p.getMonths();
int d = p.getDays();
String yStr = y > 0 ? new Integer(y).toString()
+ (y > 1 ? " Jahren, " : " Jahr, ") : "";
String mStr = m > 0 ? new Integer(m).toString()
+ (m > 1 ? " Monaten, " : " Monat, ") : "";
String dStr = d > 0 ? new Integer(d).toString()
+ (d > 1 ? " Tagen" : " Tag") : "";
int comp = endDate.compareTo(now);
if (comp > 0)
System.out
.println("Weihnachten ist in " + yStr + mStr + dStr + ".");
else if (comp == 0)
System.out.println("Heute ist Weihnachten.");
else
System.out.println("Weihnachten ist vorbei.");
}
}
Beim Vergleich beider Quelltexte lässt sich erahnen, dass die Joda-Bibliothek für die Entwicklung der Date-Time-API Pate stand. Beide Quelltexte unterscheiden sich nur hinsichtlich einiger syntaktischer Elemente.
Das aktuelle Datum in Form eines LocalDate
-Objektes
wird nun durch Aufruf der statischen Methode now()
erzeugt. Das Period
-Objekt, das das Intervall
zwischen Start- und Endzeitpunkt repräsentiert, wird nun
statt durch den Konstruktor-Aufruf durch die statische Methode Period.between()
erzeugt. Das sind auch schon die einzigen Unterschiede. Der Rest
des Codes ist identisch mit dem obigen.
import java.time.LocalDate;
import java.time.Period;
public class DatumsDifferenz1 {
public static void main(String[] args) {
calcChristmas();
}
public static void calcChristmas() {
LocalDate now = LocalDate.now();
LocalDate endDate = LocalDate.of(now.getYear(), 12, 24);
Period p = Period.between(now, endDate);
int y = p.getYears();
int m = p.getMonths();
int d = p.getDays();
String yStr = y > 0 ? new Integer(y).toString()
+ (y > 1 ? " Jahren, " : " Jahr, ") : "";
String mStr = m > 0 ? new Integer(m).toString()
+ (m > 1 ? " Monaten, " : " Monat, ") : "";
String dStr = d > 0 ? new Integer(d).toString()
+ (d > 1 ? " Tagen" : " Tag") : "";
int comp = endDate.compareTo(now);
if (comp > 0)
System.out
.println("Weihnachten ist in " + yStr + mStr + dStr + ".");
else if (comp == 0)
System.out.println("Heute ist Weihnachten.");
else
System.out.println("Weihnachten ist vorbei.");
}
}
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.