Il pacchetto java.time, introdotto in Java 8, contiene diverse classi per lavorare con date e orari.
LocalDateLa 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:
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
LocalDateTimeLa 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"
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
In questo esercizio lavorerai a un pianificatore di appuntamenti per un salone di bellezza a New York, aperto il 15 settembre 2012.
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)
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
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
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."
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)
Iscriviti a Exercism per imparare e padroneggiare Java con 26 concetti158 esercizi e il mentoring di persone reali, tutto gratis.