Java 8 – Date and Time API

Da etwas in die Jahre gekommen, wurde zu java.util.Date und java.util.Calendar mit dem Release von Java 8 eine Alternative geschaffen: LocalDate & LocalTime

Da etwas in die Jahre gekommen, wurde zu java.util.Date und java.util.Calendar mit dem Release von Java 8 eine Alternative geschaffen. Zuhause im Package java.time versucht die neue Lösung sich an benutzerfreundlicheren Factorymethoden, Formatierungslösungen, Threadsicherheit durch Unveränderlichkeit.

LocalDate und LocalTime

Als für den Menschen lesbare Formate sind java.time.LocalDate und java.time.LocalTime vorgesehen (und natürlich die Kombination: java.time.LocalDateTime). Sie bieten übersichtliche Factory Methoden

LocalDateTime now= LocalDateTime.now( ); // Aktuelles Datum LocalDate.of(2013, Month.DECEMBER, 24);
LocalTime.of(12, 00); LocalTime.parse("10:15:30");

und ihre Werte können mittels Getter erfragt werden und bieten Methoden an um neue Instanzen mit anderen Werten zu generieren.

LocalDate theDate = now.toLocalDate(); Month month = timePoint.getMonth();
//Da immutable, immer neue Instanzen erzeugt
LocalDateTime before = now.withYear(2013);
LocalDateTime soon = new.plusWeeks(1);
LocalDateTime wednesday = now.with(TemporalAdjusters.previousOrSame(ChronoUnit.WEDNESDAY));

Instant

Eine andere Darstellung eines Datums ist das java.time.Instant, das die Zeit als Millisekunden seit 01.01.1970 darstellt.

Abschneiden von Werten

Das Beschneiden von Zeiten auf eine Bestimmte Einheit ist nun ebenfalls Teil der neuen API:

LocalTime truncatedTime = now.truncatedTo(ChronoUnit.SECONDS);

Zeitzonen

Zeitzonen können mittels java.time.ZoneId mit berücksichtigt werden. Die ZoneId entspricht dann entweder dem Zeitzonenkürzel (dem Offset von UTC) oder einem Ort der entsprechenden Zeitzone. Damit kann man sich nun Entsprechungen der oben genannten Zeitklassen mit dem Prefix Zoned erzeugen, die somit eindeutig auf den Gebrauch von Zeitzonen hinweisen. z.B. java.time.ZonedDateTime

ZoneId id = ZoneId.of("Europe/Vienna");
ZonedDateTime zoned = ZonedDateTime.of(dateTime, id);

Noch viel mehr

Außerdem bietet die neue Zeit API verschiedene Kalendersysteme, Zeitspannen (Periods, Durations,…) und Formatierungen mittels DateTimeFormatter.

Werft einen Blick rein! http://docs.oracle.com/javase/tutorial/datetime/TOC.html

Ähnliche Artikel: