Track
/
Java
Java
/
Esercizi
/
Prenotazioni di bellezza
Prenotazioni di bellezza

Prenotazioni di bellezza

Esercizio di apprendimento

Introduzione

Data e ora

Il pacchetto java.time, introdotto in Java 8, contiene diverse classi per lavorare con date e orari.

LocalDate

La classe java.time.LocalDate rappresenta una data senza fuso orario nel sistema di calendario ISO-8601, come 2007-12-03:

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

Le date si possono confrontare con altre date:

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

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

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

Un'istanza di LocalDate ha dei getter per recuperarne le componenti temporali:

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

date.getDayOfMonth();
// => 3

Un'istanza di LocalDate ha dei metodi per aggiungervi unità di tempo:

Note

Questi metodi restituiscono una nuova istanza di LocalDate e non aggiornano quella esistente, dato che la classe LocalDate è immutabile.

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

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

LocalDateTime

La classe java.time.LocalDateTime rappresenta una data e un'ora senza fuso orario nel sistema di calendario ISO-8601, come 2007-12-03T10:15:30:

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

Puoi convertire un'istanza di LocalDate in un LocalDateTime:

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

Formattare le date e gli orari

Sia LocalDate che LocalDateTime usano la notazione standard ISO-8601 quando convertono da e verso una String.

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

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

Non è possibile parsare un LocalDate o un LocalDateTime da una String come questa usando un formato diverso. Per formattare le date con un formato personalizzato, invece, devi usare 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"

Puoi anche specificare una locale quando crei il formato personalizzato, per formattare e parsare date di regioni diverse:

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

Istruzioni

In questo esercizio lavorerai a un pianificatore di appuntamenti per un salone di bellezza a New York, aperto il 15 settembre 2012.

1. Analizza la data dell'appuntamento

Implementa il metodo AppointmentScheduler.schedule() per analizzare una rappresentazione testuale della data di un appuntamento e convertirla nel LocalDateTime corrispondente:

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

2. Verifica se un appuntamento è già passato

Implementa il metodo AppointmentScheduler.hasPassed(), che riceve la data di un appuntamento e verifica se l'appuntamento è nel passato:

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

3. Verifica se l'appuntamento è nel pomeriggio

Implementa il metodo AppointmentScheduler.isAfternoonAppointment(), che riceve la data di un appuntamento e verifica se l'appuntamento è nel pomeriggio (>= 12:00 e < 18:00):

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

4. Descrivi l'ora e la data dell'appuntamento

Implementa il metodo AppointmentScheduler.getDescription(), che riceve la data di un appuntamento e restituisce una descrizione di quella data e di quell'ora:

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. Restituisci la data dell'anniversario

Implementa il metodo AppointmentScheduler.getAnniversaryDate(), che restituisce la data dell'anniversario di quest'anno, cioè il 15 settembre:

AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.getAnniversaryDate()
// => LocalDate.of(<current year>, 9, 15)
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Java Exercism

Vuoi iniziare Prenotazioni di bellezza?

Iscriviti a Exercism per imparare e padroneggiare Java con 26 concetti158 esercizi e il mentoring di persone reali, tutto gratis.