Parcours
/
Java
Java
/
Exercices
/
Réserve ton rendez-vous beauté
Réserve ton rendez-vous beauté

Réserve ton rendez-vous beauté

Exercice d'apprentissage

Introduction

Date et heure

Le package java.time, introduit dans Java 8, contient plusieurs classes pour manipuler des dates et des heures.

LocalDate

La classe java.time.LocalDate représente une date sans fuseau horaire dans le système de calendrier ISO-8601, comme 2007-12-03 :

LocalDate date = LocalDate.of(2007, 12, 3);

On peut comparer des dates entre elles :

LocalDate date1 = LocalDate.of(2007, 12, 3);
LocalDate date2 = LocalDate.of(2007, 12, 4);

date1.isBefore(date2);
// => true

date1.isAfter(date2);
// => false

Une instance de LocalDate dispose d'accesseurs pour en extraire les composantes temporelles :

LocalDate date = LocalDate.of(2007, 12, 3);

date.getDayOfMonth();
// => 3

Une instance de LocalDate dispose de méthodes pour lui ajouter des unités de temps :

Note

Ces méthodes renvoient une nouvelle instance de LocalDate et ne modifient pas l'instance existante, car la classe LocalDate est immuable.

LocalDate date = LocalDate.of(2007, 12, 3);

date.plusDays(3);
// => 2007-12-06

LocalDateTime

La classe java.time.LocalDateTime représente une date et une heure sans fuseau horaire dans le système de calendrier ISO-8601, comme 2007-12-03T10:15:30 :

LocalDateTime datetime = LocalDateTime.of(2007, 12, 3, 10, 15, 30);

On peut convertir une instance de LocalDate en LocalDateTime :

LocalDate date = LocalDate.of(2007, 12, 3);
LocalDateTime datetime = date.atTime(10, 15, 30);
datetime.toString();
// => "2007-12-03T10:15:30"

Formater les dates et les heures

LocalDate comme LocalDateTime utilisent la notation standard ISO-8601 pour convertir depuis et vers une String.

LocalDateTime datetime = LocalDateTime.of(2007, 12, 3, 10, 15, 30);
LocalDateTime parsed = LocalDateTime.parse("2007-12-03T10:15:30");

datetime.isEqual(parsed);
// => true

Il n'est pas possible d'analyser une LocalDate ou une LocalDateTime à partir d'une String comme celle-ci en utilisant un format différent. À la place, pour formater des dates selon un format personnalisé, il faut utiliser java.time.format.DateTimeFormatter :

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"

On peut aussi préciser une locale lors de la création du format personnalisé, afin de formater et d'analyser selon différentes régions :

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

Instructions

Dans cet exercice, tu vas travailler sur un planificateur de rendez-vous pour un salon de beauté à New York, ouvert le 15 septembre 2012.

1. Analyse la date d'un rendez-vous

Implémente la méthode AppointmentScheduler.schedule() pour analyser une représentation textuelle d'une date de rendez-vous et la convertir en LocalDateTime correspondant :

AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.schedule("7/25/2019 13:45:00");
// => LocalDateTime.of(2019, 7, 25, 13, 45, 0)

2. Vérifie si un rendez-vous est déjà passé

Implémente la méthode AppointmentScheduler.hasPassed() qui prend une date de rendez-vous et vérifie si le rendez-vous se situe quelque part dans le passé :

AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.hasPassed(LocalDateTime.of(1999, 12, 31, 9, 0, 0));
// => true

3. Vérifie si le rendez-vous a lieu l'après-midi

Implémente la méthode AppointmentScheduler.isAfternoonAppointment() qui prend une date de rendez-vous et vérifie si le rendez-vous a lieu l'après-midi (>= 12:00 et < 18:00) :

AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.isAfternoonAppointment(LocalDateTime.of(2019, 03, 29, 15, 0, 0))
// => true

4. Décris l'heure et la date du rendez-vous

Implémente la méthode AppointmentScheduler.getDescription() qui prend une date de rendez-vous et renvoie une description de cette date et de cette heure :

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. Renvoie la date anniversaire

Implémente la méthode AppointmentScheduler.getAnniversaryDate() qui renvoie la date anniversaire de cette année, à savoir le 15 septembre :

AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.getAnniversaryDate()
// => LocalDate.of(<current year>, 9, 15)
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Java Exercism

Prêt à commencer Réserve ton rendez-vous beauté ?

Inscris-toi sur Exercism pour apprendre et maîtriser Java avec 26 concepts158 exercices, et un vrai mentorat humain, le tout gratuitement.