El paquete java.time, introducido en Java 8, contiene varias clases para trabajar con fechas y horas.
LocalDateLa clase java.time.LocalDate representa una fecha sin zona horaria en el sistema de calendario ISO-8601, como 2007-12-03:
LocalDate date = LocalDate.of(2007, 12, 3);
Las fechas se pueden comparar con otras fechas:
LocalDate date1 = LocalDate.of(2007, 12, 3);
LocalDate date2 = LocalDate.of(2007, 12, 4);
date1.isBefore(date2);
// => true
date1.isAfter(date2);
// => false
Una instancia de LocalDate tiene getters para obtener partes de la fecha:
LocalDate date = LocalDate.of(2007, 12, 3);
date.getDayOfMonth();
// => 3
Una instancia de LocalDate tiene métodos para añadirle unidades de tiempo:
Estos métodos devuelven una nueva instancia de LocalDate y no actualizan la instancia existente, ya que la clase LocalDate es inmutable.
LocalDate date = LocalDate.of(2007, 12, 3);
date.plusDays(3);
// => 2007-12-06
LocalDateTimeLa clase java.time.LocalDateTime representa una fecha y hora sin zona horaria en el sistema de calendario ISO-8601, como 2007-12-03T10:15:30:
LocalDateTime datetime = LocalDateTime.of(2007, 12, 3, 10, 15, 30);
Puedes convertir una instancia de LocalDate en una LocalDateTime:
LocalDate date = LocalDate.of(2007, 12, 3);
LocalDateTime datetime = date.atTime(10, 15, 30);
datetime.toString();
// => "2007-12-03T10:15:30"
Tanto LocalDate como LocalDateTime usan la notación estándar ISO-8601 al convertir desde y hacia un String.
LocalDateTime datetime = LocalDateTime.of(2007, 12, 3, 10, 15, 30);
LocalDateTime parsed = LocalDateTime.parse("2007-12-03T10:15:30");
datetime.isEqual(parsed);
// => true
No es posible parsear un LocalDate o LocalDateTime desde un String como este usando un formato diferente.
En su lugar, para formatear fechas con un formato personalizado, debes usar 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"
También se puede especificar una configuración regional al crear el formato personalizado, para formatear y parsear según distintas regiones:
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
En este ejercicio vas a trabajar en un planificador de citas para un salón de belleza en Nueva York que abrió el 15 de septiembre de 2012.
Implementa el método AppointmentScheduler.schedule() para analizar una representación textual de la fecha de una cita y convertirla en el LocalDateTime correspondiente:
AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.schedule("7/25/2019 13:45:00");
// => LocalDateTime.of(2019, 7, 25, 13, 45, 0)
Implementa el método AppointmentScheduler.hasPassed() que recibe la fecha de una cita y comprueba si la cita fue en algún momento del pasado:
AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.hasPassed(LocalDateTime.of(1999, 12, 31, 9, 0, 0));
// => true
Implementa el método AppointmentScheduler.isAfternoonAppointment() que recibe la fecha de una cita y comprueba si la cita es por la tarde (>= 12:00 y < 18:00):
AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.isAfternoonAppointment(LocalDateTime.of(2019, 03, 29, 15, 0, 0))
// => true
Implementa el método AppointmentScheduler.getDescription() que recibe la fecha de una cita y devuelve una descripción de esa fecha y hora:
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 el método AppointmentScheduler.getAnniversaryDate() que devuelve la fecha de aniversario de este año, que es el 15 de septiembre:
AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.getAnniversaryDate()
// => LocalDate.of(<current year>, 9, 15)
Regístrate en Exercism para aprender y dominar Java con 26 conceptos158 ejercicios y mentoría humana real, todo gratis.