Einführung in die Arbeit mit Datum und Uhrzeit in Java
Die Arbeit mit Datum und Uhrzeit gehört zu den häufigsten Aufgaben in der Anwendungsentwicklung. Java bietet dafür leistungsstarke Werkzeuge. Lange Zeit war die Hauptklasse java.util.Date, die jedoch schwerwiegende Nachteile hatte: Veränderbarkeit (Mutabilität), Verwirrung bei den Monaten (Beginn bei 0) und fehlende Unterstützung für Zeitzonen. Mit der Veröffentlichung von Java 8 änderte sich die Situation grundlegend – es entstand die neue Date/Time API (Paket java.time), die threadsicher, unveränderlich (immutable) und intuitiv verständlich ist. In diesem Artikel werden wir beide Ansätze behandeln, den Schwerpunkt jedoch auf die moderne API legen.
1. Legacy API: Date und Calendar
Obwohl die Verwendung der alten Klassen in neuem Code nicht empfohlen wird, können Sie ihnen in Legacy-Projekten begegnen. Betrachten wir die wichtigsten Punkte.
Die Klasse Date
Die Klasse java.util.Date repräsentiert einen bestimmten Zeitpunkt mit einer Genauigkeit von Millisekunden. Sie hat zahlreiche veraltete Methoden.
import java.util.Date;
public class LegacyDateExample { public static void main(String[] args) { // Aktuelles Datum und Uhrzeit Date now = new Date(); System.out.println("Aktuelles Datum: " + now);
// Datum basierend auf Millisekunden (seit 1. Januar 1970) Date specificDate = new Date(1000000000000L); System.out.println("Datum nach Timestamp: " + specificDate);
// Datumsvergleich Date earlier = new Date(0); boolean isBefore = earlier.before(now); // true System.out.println("Ist früher? " + isBefore); }}Die Klasse Calendar
java.util.Calendar ist ein flexibleres, aber umständliches Werkzeug. Es ermöglicht die Manipulation von Datumsfeldern.
import java.util.Calendar;
public class CalendarExample { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); // Festlegen eines bestimmten Datums: 25. Dezember 2024 cal.set(2024, Calendar.DECEMBER, 25, 10, 30, 0); System.out.println("Datum: " + cal.getTime());
// Hinzufügen von 2 Wochen cal.add(Calendar.WEEK_OF_YEAR, 2); System.out.println("In 2 Wochen: " + cal.getTime());
// Abrufen einzelner Felder int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH); int month = cal.get(Calendar.MONTH) + 1; // +1, da Januar = 0 System.out.println("Tag: " + dayOfMonth + ", Monat: " + month); }}Nachteile: Veränderbarkeit (die Methode add ändert das ursprüngliche Objekt), Komplexität der Formatierung, Verwirrung bei Zeitzonen.
2. Moderne Date/Time API (Java 8+)
Das Paket java.time enthält die wichtigsten Klassen: LocalDate, LocalTime, LocalDateTime, ZonedDateTime, Instant und andere. Sie sind alle unveränderlich und threadsicher.
LocalDate – Arbeiten mit dem Datum
Speichert ein Datum ohne Uhrzeit und Zeitzone (Jahr, Monat, Tag).
import java.time.LocalDate;import java.time.Month;
public class LocalDateExample { public static void main(String[] args) { // Aktuelles Datum LocalDate today = LocalDate.now(); System.out.println("Heute: " + today);
// Bestimmtes Datum LocalDate newYear = LocalDate.of(2025, Month.JANUARY, 1); System.out.println("Neujahr: " + newYear);
// Datumsarithmetik LocalDate nextWeek = today.plusWeeks(1); LocalDate lastMonth = today.minusMonths(1); System.out.println("Nächste Woche: " + nextWeek); System.out.println("Letzten Monat: " + lastMonth);
// Vergleich boolean isAfter = today.isAfter(newYear); // false System.out.println("Ist heute nach Neujahr? " + isAfter); }}LocalTime – Arbeiten mit der Uhrzeit
Speichert die Uhrzeit (Stunde ```