Suche
Für das Plus an Zeitausgaben

Java 9: Erweiterungen in der Klasse „LocalDate“

Michael Inden

© 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 eine LocalDate-Instanz in einen long, 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 ein java.time.Instant-Objekt in ein LocalDate um, wobei eine Zeitzone in Form einer java.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.

Java 9 – Die Neuerungen

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.

Weitere Informationenen zum Buch gibt es hier!

Verwandte Themen:

Geschrieben von
Michael Inden
Michael Inden
Dipl.-Inform. Michael Inden ist Oracle-zertifizierter Java-Entwickler für JDK 6. Nach seinem Studium in Oldenburg war er lange Zeit als Softwareentwickler und -architekt bei verschiedenen internationalen Firmen tätig und arbeitet derzeit als Teamleiter Softwareentwicklung in Zürich. Michael Inden hat rund 20 Jahre Erfahrung beim Entwurf komplexer Softwaresysteme gesammelt, an diversen Fortbildungen und an mehreren Java-One-Konferenzen in San Francisco teilgenommen. Sein Wissen gibt er gerne als Trainer in Schulungen und auf Konferenzen weiter. Sein besonderes Interesse gilt dem Design qualitativ hochwertiger Applikationen mit ergonomischen, grafischen Oberflächen sowie dem Coaching von Kollegen.
Kommentare
  1. Pepe2017-11-13 17:31:30

    Wo kommt denn im ersten Codebeispiel die Variable "birthday" her (Zeilen 6 und 11)? Sollte das nicht eher "myBirthday" sein.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.