Tracks
/
Java
Java
/
Übungen
/
Termine für die Schönheit
Termine für die Schönheit

Termine für die Schönheit

Lernübung

Einführung

Datum und Uhrzeit

Das in Java 8 eingeführte Paket java.time enthält mehrere Klassen, um mit Datum und Uhrzeit zu arbeiten.

LocalDate

Die 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:

Note

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

LocalDateTime

Die 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"

Datums- und Uhrzeitangaben formatieren

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

Anleitung

In dieser Übung arbeitest du an einem Terminplaner für einen Schönheitssalon in New York, der am 15. September 2012 eröffnet wurde.

1. Termindatum parsen

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)

2. Prüfen, ob ein Termin bereits vorbei ist

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

3. Prüfen, ob der Termin am Nachmittag liegt

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

4. Uhrzeit und Datum des Termins beschreiben

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."

5. Das Jubiläumsdatum zurückgeben

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)
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Java Exercism

Bereit, mit Termine für die Schönheit zu starten?

Melde dich bei Exercism an, um Java mit 26 Konzepte158 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.