infos:tutorials:java:datum

Datumsangaben in Java

Java bietet eine Reihe von Klassen, die sich mit Datumsangaben beschäftigen. Dabei kann man leicht den Überblick verlieren. Die Klasse java.util.Date stellt die bevorzugte Klasse zum Speichern von Datumsangaben dar. Ursprünglich hatte sie noch weitere Aufgaben zur Manipulation von Datumsangaben, die inzwischen als veraltet (deprecated) erklärt worden sind. Die Funktionen sind in andere Klassen ausgelagert worden. Die einzige Funktionalität, die noch erhalten ist, ist der Vergleich mittels before(), equals() und after().

Datumsangaben in Form von Date beinhalten auch die Uhrzeit, diese muss man allerdings nicht anzeigen, siehe folgender Abschnitt.

Mit der Klasse java.text.SimpleDateFormat lassen sich Date-Objekte ausgeben und auch einlesen. Beim Erzeugen eines solchen Formats gibt man das gewünschte Muster an. Die Details des Musters werden in der SimpleDateFormat-Javadoc erläutert. Ein Beispiel ist das ISO-Format:

SimpleDateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd");

Mit der parse() Methode kann nun ein String eingelesen werden und so ein Date-Objekt erzeugt werden. Ist der String nicht nach dem gegebenen Muster formatiert, wird eine ParseException geworfen. Entsprechend ist ein try-catch Block nötig:

try {
    Date sadDay = isoFormat.parse("1994-05-04");
} catch (ParseException e) {
    e.printStackTrace();
}

Umgekehrt kann mit format(Date someDate) ein Date-Objekt in einen String konvertiert werden.

Das Modifizieren von Datumsangaben erfolgt mit Hilfe der Klasse java.util.Calendar, siehe auch in der Calendar-JavaDoc. Instanzen lassen sich nicht über einen Konstruktor sondern mit Calender.getInstance() erzeugen. Hier können auch Zeitzonen oder sogenannte Locales übergeben werden. Da die Poolrechner teilweise unterschiedlich eingestellte Locales haben, empfehlen wir im SoPra Calendar.getInstance(Locale.GERMANY) zu verwenden.

Calendar ist kein Singleton, man kann also mehrere Instanzen erzeugen. Die Instantiierung ist allerdings sowohl zeit- als auch speicheraufwändig. Es bietet sich daher an, Calendar-Instanzen zu speichern und wiederzuverwenden. Mit der Methode setTime(Date aDate) kann ein Kalender auf ein bestimmtes Datum gesetzt werden. Analog kann mit getTime() das Date, auf dem der Kalender gerade steht, ermittelt werden.

Der Kalender kann aber auch direkt manipuliert werden. Dabei kann mit set() jedes Feld im Kalender verändert werden. Der erste Parameter ist dabei eine Konstante, die in der Calendar-Klasse definiert ist und das zu verändernde Feld benennt. Der zweite Parameter gibt den neuen Wert an.

Calendar calendar = Calendar.getInstance(Locale.GERMANY);
calendar.set(Calendar.YEAR, 1994);
calendar.set(Calendar.MONTH, Calendar.APRIL);
calendar.set(Calendar.DAY_OF_MONTH, 5);

Umgekehrt lassen sich auf diese Weise einzelne Felder auslesen, z.B. die Woche im Jahr:

import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
 
public class CalendarUtil {
    private static Calendar calendar = Calendar.getInstance(Locale.GERMANY);
 
    public int getWeekOfYear(Date date) {
        calendar.setTime(date);
        return calendar.get(Calendar.WEEK_OF_YEAR);
    }
}

In der Calendar-JavaDoc finden sich alle Konstanten für die Felder im Kalender.

Eine andere Möglichkeit zum manipulieren des Kalenders stellen die Methoden add(int field, int amount) und roll(int field, int amount) da. Wie bei set(int field, int value) gibt der erste Parameter das Feld an. Der zweite Parameter wird auf das Feld addiert. Den Unterschied zwischen den beiden Methoden können Sie in der Doku nachlesen oder durch ein Experiment leicht heraus finden.

  • infos/tutorials/java/datum.txt
  • Zuletzt geändert: 2016/03/01 17:27
  • von florian.kasper