Java SE 8 Programmer II: Date and Time

Das Handling von Datum und Zeit wurden über die gut 20 Jahre, die es Java nun schon gibt, mehrfach komplett überarbeitet. Da all die alten Ansätze aus Kompatibilitätsgründen noch im JDK enthalten sind, lässt sich der Prozess gut nachvollziehen.

Datum und Zeit werden unter Java 8 nach ISO-8601 abgebildet. Die allermeisten Klassen im Date-Time API sind unveränderbar dank dem Einsatz von Factory-Methoden statt Konstruktoren.
Die Nameskonventionen für Methoden sind wie folgt:

Bildschirmfoto 2018-01-26 um 06.24.56.png

In den Enums java.time.temporal.ChronoField und java.time.temporal.ChronoUnit (Implementation von java.time.temporal.TemporalUnit) sind die Konstanten abgelegt, die im Date-Time API verwendet werden.
LocalDate und LocalTime lassen sich zu LocalDateTime kombinieren und wieder auseinandernehmen.

Zeitpunkte werden durch java.time.Instant abgebildet. Dabei ist zu beachten, dass Veränderungen von Zeitpunkten mittels with() nur für Sekunden, bzw. Bruchteile von Sekunden möglich sind. Bei anderen Zeiteinheiten wird eine DateTimeException ausgelöst.

Differenzen zwischen Daten und Uhrzeiten werden mittels java.time.Period bzw. java.time.Duration abgebildet.

Für die Konversion zwischen einem Zeitpunkt und einer LocalDateTime wird java.time.ZoneId verwendet. ZoneIds können entweder als "UTC-02:00" (alternativ "GMT..." oder "UT...") oder "Europe/Zurich" angegeben werden. Die Klasse ZoneOffset (Subklasse von ZoneId) bildet die Zeitdifferenz to UTC ab. Beim Initialisieren eines ZoneOffset muss das erste Zeichen des Strings '+' oder '-' sein. Wenn der ZoneOffset '0' ist, muss 'Z'. angegeben werden.

ZonedDateTime bildet die Kombination von LocalDateTime und einer ZoneId ab. Achtung: an Orten, wo die Zeitumstellung gilt, ändert die Uhrzeit dadurch zwei Mal pro Jahr. Dies ist bei der Zertifikatsprüfung zu beachten. Zu beachtendes Detail: wird zu einer ZonedDateTime eine Period von einem Tag addiert, ändert sich die Uhrzeit auch bei Umstellung auf Sommerzeit nicht. Wenn eine Duration von einem Tag addiert wird, ändert die Uhrzeit um die verlorene Stunde.

java.time.OffsetTime bildet eine Zeitdifferenz zu ITC in Nanosekunden ab. Bei der Klasse java.time.OffsetDateTime kommen noch Datumsinformationen hinzu.

Zum Parsing und zur Formatierung von Datum und Zeit wird die Klasse java.time.format.DateTimeFormatter verwendet.