Arbeiten mit Datum und Uhrzeit in Java: Fortgeschrittene Methoden und API

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Fortgeschrittene Arbeit mit Datum und Uhrzeit in Java: Von den Grundlagen zur Professionalität

\n\n

Die Arbeit mit Datum und Uhrzeit ist eine der Kernaufgaben jeder Enterprise-Anwendung. In Java war lange Zeit das sperrige java.util.Date und java.util.Calendar der Standard, aber mit der Veröffentlichung von Java 8 änderte sich die Situation grundlegend. Die neue java.time API (JSR-310) bot Entwicklern ein leistungsstarkes, threadsicheres und intuitiv verständliches Toolkit. In diesem Artikel werden wir fortgeschrittene Techniken zur Arbeit mit Datum und Uhrzeit behandeln, die für jeden Java-Entwickler nützlich sind.

\n\n

1. Grundlagen der java.time API: LocalDate, LocalTime, LocalDateTime

\n\n

Der erste Schritt zur professionellen Arbeit ist das Verständnis der drei grundlegenden Klassen, die die alten Pendants ersetzt haben:

\n\n
    \n
  • LocalDate — Datum ohne Uhrzeit (Jahr, Monat, Tag).
  • \n
  • LocalTime — Uhrzeit ohne Datum (Stunden, Minuten, Sekunden, Nanosekunden).
  • \n
  • LocalDateTime — Kombination von Datum und Uhrzeit ohne Zeitzonenbindung.
  • \n
\n\n
// Aktuelles Datum und Uhrzeit abrufen\nLocalDate today = LocalDate.now(); // 2025-03-21\nLocalTime now = LocalTime.now(); // 14:30:15.123\nLocalDateTime current = LocalDateTime.now(); // 2025-03-21T14:30:15.123\n\n// Erstellen eines bestimmten Datums\nLocalDate birthDate = LocalDate.of(1990, Month.JUNE, 15);\nLocalTime meetingTime = LocalTime.of(10, 30, 0);\n\n// Manipulationen mit Daten\nLocalDate nextWeek = today.plusWeeks(1);\nLocalDate lastMonth = today.minusMonths(1);
\n\n

Diese Klassen sind unveränderlich — jede Operation gibt ein neues Objekt zurück. Dies gewährleistet Threadsicherheit und Vorhersagbarkeit des Codes.

\n\n

2. Arbeiten mit Zeitzonen: ZonedDateTime und ZoneId

\n\n

Globale Anwendungen können Zeitzonen nicht ignorieren. Dafür bietet java.time die Klasse ZonedDateTime.

\n\n
// Aktuelle Zeit in UTC\nZonedDateTime utcNow = ZonedDateTime.now(ZoneOffset.UTC);\n\n// Zeit in einer bestimmten Zeitzone\nZoneId moscowZone = ZoneId.of("Europe/Moscow");\nZonedDateTime moscowTime = ZonedDateTime.now(moscowZone);\n\n// Konvertierung zwischen Zeitzonen\nZonedDateTime nyTime = moscowTime.withZoneSameInstant(ZoneId.of("America/New_York"));\n\n// Abrufen des Offsets\nZoneOffset offset = moscowTime.getOffset(); // +03:00
\n\n

Professioneller Tipp: Speichern Sie Daten auf dem Server immer in UTC und konvertieren Sie sie nur auf der Präsentationsebene (UI) in die lokale Zeitzone. Dies vermeidet Probleme mit der Sommer-/Winterzeitumstellung.

\n\n

3. Parsen und Formatieren von Daten: DateTimeFormatter

\n\n

Eine der häufigsten Aufgaben ist die Umwandlung eines Strings in ein Datum und umgekehrt. DateTimeFormatter bietet flexible Möglichkeiten.

\n\n

Basis-Formatierung

\n\n
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss");\nLocalDateTime dateTime = LocalDateTime.parse("21.03.2025 14:30:00", formatter);\nString formatted = dateTime.format(formatter); // "21.03.2025 14:30:00"
\n\n

Fortgeschrittene Muster

\n\n
// ISO-8601\nDateTimeFormatter isoFormatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;\nString isoDate = dateTime.format(isoFormatter); // "2025-03-21T14:30:00"\n\n// Lokalisierte Formatierung\nDateTimeFormatter italianFormatter = DateTimeFormatter.ofPattern("d MMMM yyyy", Locale.ITALY);\nString italianDate = dateTime.format(italianFormatter); // "21 marzo 2025"\n\n// Eigenes Format mit Textfeldern\nDateTimeFormatter customFormatter = new DateTimeFormatterBuilder()\n    .appendValue(ChronoField.YEAR)\n    .appendLiteral(" Jahr, ")\n    .appendText(ChronoField.MONTH_OF_YEAR, TextStyle.FULL)\n    .appendLiteral(" ")\n    .appendValue(ChronoField.DAY_OF_MONTH)\n    .toFormatter();\nString custom = dateTime.format(customFormatter); // "2025 Jahr, März 21"
\n\n

Wichtig zu beachten: DateTimeFormatter ist ebenfalls unveränderlich und threadsicher.

Blogs

Buchempfehlungen