Das in Java 8 eingeführte Paket java.time enthält mehrere Klassen für die Arbeit mit Datum und Uhrzeit.
LocalDateDie Klasse java.time.LocalDate stellt ein Datum ohne Zeitzone im ISO-8601-Kalendersystem dar, zum Beispiel 2007-12-03:
LocalDate date = LocalDate.of(2007, 12, 3);
Daten lassen sich mit anderen Daten vergleichen:
LocalDate date1 = LocalDate.of(2007, 12, 3);
LocalDate date2 = LocalDate.of(2007, 12, 4);
date1.isBefore(date2);
// => true
date1.isAfter(date2);
// => false
Eine LocalDate-Instanz hat Getter, mit denen du ihre Bestandteile abrufen kannst:
LocalDate date = LocalDate.of(2007, 12, 3);
date.getYear();
// => 2007
date.getMonthValue();
// => 12
date.getDayOfMonth();
// => 3
Eine LocalDate-Instanz hat Methoden, mit denen du Zeiteinheiten hinzufügen kannst.
Diese Methoden geben eine neue LocalDate-Instanz zurück und ändern die vorhandene Instanz nicht, da die Klasse LocalDate unveränderlich ist.
LocalDate date = LocalDate.of(2007, 12, 3);
date.plusDays(3);
// => 2007-12-06
date.plusMonths(1);
// => 2008-01-03
date.plusYears(1);
// => 2008-12-03
LocalDateTimeDie Klasse java.time.LocalDateTime stellt einen Datums- und Zeitwert ohne Zeitzone im ISO-8601-Kalendersystem dar, zum Beispiel 2007-12-03T10:15:30:
LocalDateTime datetime = LocalDateTime.of(2007, 12, 3, 10, 15, 30);
datetime.getYear();
// => 2007
datetime.getMonthValue();
// => 12
datetime.getDayOfMonth();
// => 3
datetime.getHours();
// => 10
datetime.getMinutes();
// => 15
datetime.getSeconds();
// => 30
Wie die Klasse LocalDate bietet eine LocalDateTime-Instanz dieselben Methoden, um sie mit anderen LocalDateTime-Instanzen zu vergleichen und Zeiteinheiten hinzuzufügen.
Du kannst eine LocalDate-Instanz außerdem in eine LocalDateTime umwandeln:
LocalDate date = LocalDate.of(2007, 12, 3);
LocalDateTime datetime = date.atTime(10, 15, 30);
datetime.toString();
// => "2007-12-03T10:15:30"
Sowohl LocalDate als auch LocalDateTime verwenden die Standardnotation nach ISO-8601, wenn sie aus einem String erzeugt oder in einen String umgewandelt werden.
LocalDateTime datetime = LocalDateTime.of(2007, 12, 3, 10, 15, 30);
LocalDateTime parsed = LocalDateTime.parse("2007-12-03T10:15:30");
datetime.isEqual(parsed);
// => true
Es ist nicht möglich, ein LocalDate oder LocalDateTime auf diese Weise mit einem anderen Format aus einem String zu parsen.
Um Datumsangaben stattdessen mit einem eigenen Format zu formatieren, verwendest du den java.time.format.DateTimeFormatter:
DateTimeFormatter parser = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate date = LocalDate.parse("03/12/2007", formatter);
DateTimeFormatter printer = DateTimeFormatter.ofPattern("MMMM d, yyyy");
printer.format(date);
// => "December 3, 2007"
Beim Erstellen des eigenen Formats kannst du außerdem ein Locale angeben, um für verschiedene Regionen zu formatieren und zu parsen:
DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.FRENCH).format(date);
// => décembre 3, 2007
DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.of("pt")).format(date);
// => dezembro 3, 2007