Arbeiten mit Datum und Uhrzeit in Java: fortgeschrittene Techniken 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 LocalDate bis zu komplexen Manipulationen



Im modernen Java (ab Version 8) ist das Paket java.time der De-facto-Standard für die Arbeit mit Datum und Uhrzeit. Es hat die veralteten java.util.Date und java.util.Calendar abgelöst und bietet unveränderliche (immutable) Objekte, Thread-Sicherheit und eine intuitive API. In diesem Artikel werden wir fortgeschrittene Techniken behandeln: Arbeit mit Zeitzonen, präzise Differenzberechnungen, benutzerdefinierte Korrektoren und komplexe Formatierung.



1. Datumsmanipulationen mit TemporalAdjusters



Eine der leistungsstärksten Funktionen von java.time ist das Interface TemporalAdjuster. Es ermöglicht komplexe Datumsanpassungen – zum Beispiel den „nächsten Dienstag“ oder den „letzten Tag des Monats“ zu finden.



Die Klasse TemporalAdjusters (beachten Sie die Mehrzahl) enthält vorgefertigte statische Methoden:



  • firstDayOfMonth() – erster Tag des Monats;
  • lastDayOfMonth() – letzter Tag des Monats;
  • next(DayOfWeek.FRIDAY) – nächster angegebener Wochentag;
  • previousOrSame(DayOfWeek.MONDAY) – vorheriger oder aktueller Montag.


Beispiel: Finden wir das Datum des nächsten Mittwochs nach dem 15. März 2024.



import java.time.LocalDate;import java.time.DayOfWeek;import java.time.temporal.TemporalAdjusters;

public class TemporalExample { public static void main(String[] args) { LocalDate date = LocalDate.of(2024, 3, 15); LocalDate nextWednesday = date.with(TemporalAdjusters.next(DayOfWeek.WEDNESDAY)); System.out.println("Nächster Mittwoch: " + nextWednesday); // Ausgabe: 2024-03-20 }}


Sie können auch eigene Korrektoren erstellen, indem Sie das funktionale Interface TemporalAdjuster implementieren. Dies ist besonders nützlich für Geschäftslogik wie „erster Arbeitstag des Monats“ oder „letzter Freitag des Quartals“.



2. Arbeit mit Zeitzonen und ZonedDateTime



Globale Anwendungen müssen Zeitzonen berücksichtigen. Die Klasse ZonedDateTime kombiniert Datum, Uhrzeit und Zone (ZoneId).



Beispiel: Umrechnung der Zeit von New York nach Berlin unter Berücksichtigung der Sommer-/Winterzeit.



import java.time.ZonedDateTime;import java.time.ZoneId;import java.time.format.DateTimeFormatter;

public class ZoneExample { public static void main(String[] args) { ZonedDateTime newYork = ZonedDateTime.now(ZoneId.of("America/New_York")); ZonedDateTime berlin = newYork.withZoneSameInstant(ZoneId.of("Europe/Berlin"));

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm z"); System.out.println("New York: " + newYork.format(formatter)); System.out.println("Berlin: " + berlin.format(formatter)); }}


Wichtig: Verwenden Sie ZoneId.getAvailableZoneIds(), um alle verfügbaren Zonen zu erhalten. Vermeiden Sie dreibuchstabige Abkürzungen (EST, PST) – sie sind mehrdeutig. Verwenden Sie immer das Format continent/city (z.B. Asia/Tokyo).



3. Präzise Differenzberechnungen: ChronoUnit und Duration



Für die Berechnung der Differenz zwischen Daten gibt es in Java zwei Ansätze:



  • ChronoUnit – für Differenzen in Kalendereinheiten (Tage, Monate, Jahre);
  • Duration – für präzise Zeitintervalle (Sekunden, Nanosekunden).


Beispiel: Wie viele Tage und Monate sind es noch bis Neujahr?



import java.time.LocalDate;import java.time.temporal.ChronoUnit;

public class DiffExample { public static void main(String[] args) { LocalDate today = LocalDate.now(); LocalDate newYear = LocalDate.of(today.getYear() + 1, 1, 1);

long days = ChronoUnit.DAYS.between(today, new

Blogs

Buchempfehlungen