Java 9: Erweiterungen in der Klasse „LocalDate“

© Shutterstock.com / Profit_Image
Das kürzlich erschienene Java 9 besteht aus mehr als nur Modulen und dem Projekt Jigsaw. Über 90 sogenannte JEPs (JDK Enhancement Proposals) sind Teil von Version 9 des Java Development Kits. Im fünften Teil seiner Serie zu Java 9 stellt Michael Inden, Oracle-zertifizierter Java-Entwickler, einige mit JDK 9 eingeführte Erweiterungen der Klasse LocalDate
vor, die nicht Teil eines JEPs sind.
Die vorliegende Artikelserie zu Java 9 setzt sich aus Texten von Michael Indens Buch „Java 9 – Die Neuerungen“ zusammen, das beim dpunkt.verlag erschienen ist.
PS: Verpassen Sie nicht unsere Infografik zu Project Jigsaw!
Nachdem wir im ersten Teil dieser Blog-Serie diverse kleinere Änderungen in der Syntax der Sprache Java kennengelernt haben, schauten wir uns im zweiten Teil einige relevante Erweiterungen im JDK an, konkreter: im Process-API und den Collection-Factory-Methoden. Im dritten Teil ging es anschließend um die Ergänzungen im Stream-API, im vierten Teil bespricht Michael Inden die Erweiterungen in Optional<T>
. Im fünften Teil der Artikelserie stehen die Erweiterungen der Java-Klasse LocalDate
im Fokus.
Erweiterungen in „LocalDate“
Kommen wir nun zu einigen Erweiterungen in der Klasse java.time.LocalDate
aus dem mit JDK 8 eingeführten Date and Time API. Dieses API war an sich schon recht komplett, sodass sich mit JDK 9 dort nur kleine Ergänzungen finden. Die Klasse LocalDate
besitzt nun eine überladene Methode datesUntil()
. Diese erzeugt einen Stream<LocalDate>
zwischen zwei LocalDate
-Instanzen und erlaubt es, optional eine Schrittweite vorzugeben:
public static void main(final String[] args) { final LocalDate myBirthday = LocalDate.of(1971, Month.FEBRUARY, 7); final LocalDate christmas = LocalDate.of(1971, Month.DECEMBER, 24); System.out.println("Day-Stream"); final Stream<LocalDate> daysUntil = birthday.datesUntil(christmas); daysUntil.skip(150).limit(4).forEach(System.out::println); System.out.println("\nMonth-Stream"); final Stream<LocalDate> monthsUntil = birthday.datesUntil(christmas, Period.ofMonths(1)); monthsUntil.limit(3).forEach(System.out::println); }
Führen wir das obige Programm aus, so wird startend vom 7. Februar zunächst 150 Tage in die Zukunft gesprungen, wodurch man am 7. Juli landet. Zudem zeigen die zweiten Ausgaben die Vorgabe einer Schrittweite, hier Monate:
Day-Stream 1971-07-07 1971-07-08 1971-07-09 1971-07-10 Month-Stream 1971-02-07 1971-03-07 1971-04-07
Weitere neue Methoden
In der Klasse LocalDate finden sich noch zwei erwähnenswerte Neuerungen:
toEpochSecond(LocalTime, ZoneOffset)
– Konvertiert eineLocalDate
-Instanz in einenlong
, der den seit dem Referenzwert 1970-01-01T00:00:00Z vergangenen Sekunden entspricht.Weil ein LocalDate keine Zeitinformation besitzt, muss hier ein LocalTime- sowie ein java.time.ZoneOffset-Objekt übergeben werden.ofInstant(Instant, ZoneId)
– Wandelt einjava.time.Instant-Objekt
in einLocalDate
um, wobei eine Zeitzone in Form einerjava.time.ZoneId
benötigt wird.
Fazit zum ersten Teil der Serie
Java 9 enthält eine Vielzahl sinnvoller und praktischer Neuerungen und Ergänzungen in bestehenden APIs. Viele alltägliche Programmieraufgaben lassen sich dadurch noch ein wenig eleganter und kürzer als mit Java 8 realisieren. Zunächst stand ich den Collection-Factory-Methoden skeptisch gegenüber, mittlerweile finde ich sie beim Programmieren und zur Definition kleinerer Collections aber als extrem nützlich. Einzig die privaten Methoden in Interfaces wollen mir so gar nicht gefallen.
Kommen wir zu einschneidendsten Neuerung von Java 9: Endlich besitzt auch Java ein Modularisierungssystem. Dieses stellt sowohl beim Entwickeln als auch zur Laufzeit eine verlässliche Konfiguration und Abhängigkeitsverwaltung sicher. Allerdings hinkt derzeit der Support durch Tools noch ein wenig hinterher.
Java 9 stellt insgesamt einen würdigen Nachfolger von Java 8 dar und die Java-Programmierung wird damit auch für die Zukunft für viele Entwickler und Firmen attraktiv sein.

Michael Indens Buch bietet einen fundierten Einstieg in Java 9 sowie einen Überblick über die umfangreichen Neuerungen in der aktuellen Version. Damit eignet sich das Buch für all jene, die ihr Java-Wissen aktualisieren wollen. Dabei helfen eine Vielzahl an Übungen, um die einzelnen Themengebiete zu vertiefen und besser zu verstehen.
Neben Änderungen an der Sprache bilden auch die Erweiterungen in diversen APIs einen Schwerpunkt. Fehlen darf hier natürlich auch nicht ein Kapitel über die fundamentalste Änderung in Java 9: Project Jigsaw. Auch fortgeschrittenere Themen wie Services und die Migration bestehender Applikationen werden besprochen. Da Java 9 auch einige Auswirkungen auf Build Tools und IDEs mit sich bringt, gibt ein Kapitel einen Überblick über den derzeitigen Stand zum Tooling rund um die neue Java-Version.
Wo kommt denn im ersten Codebeispiel die Variable „birthday“ her (Zeilen 6 und 11)? Sollte das nicht eher „myBirthday“ sein.