Das in Java 8 eingeführte Paket java.time enthält mehrere Klassen, um mit Datum und Uhrzeit zu arbeiten.
LocalDateDie Klasse java.time.LocalDate repräsentiert ein Datum ohne Zeitzone im ISO-8601-Kalendersystem, zum Beispiel 2007-12-03:
LocalDate date = LocalDate.of(2007, 12, 3);
Datumsangaben lassen sich mit anderen Datumsangaben 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 einzelne Zeitanteile daraus abrufen kannst:
LocalDate date = LocalDate.of(2007, 12, 3);
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 aktualisieren die bestehende Instanz nicht, da die Klasse LocalDate unveränderlich ist.
LocalDate date = LocalDate.of(2007, 12, 3);
date.plusDays(3);
// => 2007-12-06
LocalDateTimeDie Klasse java.time.LocalDateTime repräsentiert einen Zeitpunkt aus Datum und Uhrzeit ohne Zeitzone im ISO-8601-Kalendersystem, zum Beispiel 2007-12-03T10:15:30:
LocalDateTime datetime = LocalDateTime.of(2007, 12, 3, 10, 15, 30);
Du kannst eine LocalDate-Instanz in einen 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 in einen String umgewandelt oder daraus gelesen 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, solltest du den java.time.format.DateTimeFormatter verwenden:
DateTimeFormatter parser = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate date = LocalDate.parse("03/12/2007", parser);
DateTimeFormatter printer = DateTimeFormatter.ofPattern("MMMM d, yyyy");
printer.format(date);
// => "December 3, 2007"
Beim Erstellen des eigenen Formats kann auch ein Locale angegeben werden, 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
In dieser Übung arbeitest du an einem Terminplaner für einen Schönheitssalon in New York, der am 15. September 2012 eröffnet wurde.
Implementiere die Methode AppointmentScheduler.schedule(), um eine textuelle Darstellung eines Termindatums in den entsprechenden LocalDateTime zu parsen:
AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.schedule("7/25/2019 13:45:00");
// => LocalDateTime.of(2019, 7, 25, 13, 45, 0)
Implementiere die Methode AppointmentScheduler.hasPassed(), die ein Termindatum entgegennimmt und prüft, ob der Termin irgendwann in der Vergangenheit lag:
AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.hasPassed(LocalDateTime.of(1999, 12, 31, 9, 0, 0));
// => true
Implementiere die Methode AppointmentScheduler.isAfternoonAppointment(), die ein Termindatum entgegennimmt und prüft, ob der Termin am Nachmittag liegt (>= 12:00 und < 18:00):
AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.isAfternoonAppointment(LocalDateTime.of(2019, 03, 29, 15, 0, 0))
// => true
Implementiere die Methode AppointmentScheduler.getDescription(), die ein Termindatum entgegennimmt und eine Beschreibung dieses Datums und dieser Uhrzeit zurückgibt:
AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.getDescription(LocalDateTime.of(2019, 03, 29, 15, 0, 0))
// => "You have an appointment on Friday, March 29, 2019, at 3:00 PM."
Implementiere die Methode AppointmentScheduler.getAnniversaryDate(), die das Jubiläumsdatum dieses Jahres zurückgibt, also den 15. September:
AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.getAnniversaryDate()
// => LocalDate.of(<current year>, 9, 15)
Melde dich bei Exercism an, um Java mit 26 Konzepte158 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.