Tracks
/
Java
Java
/
Ejercicios
/
Citas para el salón de belleza
Citas para el salón de belleza

Citas para el salón de belleza

Ejercicio de aprendizaje

Introducción

Fecha y hora

El paquete java.time, introducido en Java 8, contiene varias clases para trabajar con fechas y horas.

LocalDate

La 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 métodos getter para obtener partes de la fecha:

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

date.getDayOfMonth();
// => 3

Una instancia de LocalDate tiene métodos para agregarle unidades de tiempo:

Note

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

LocalDateTime

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

Formato de fechas y horas

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 un LocalDateTime desde un String como el anterior usando un formato diferente. En su lugar, para dar formato a las 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 puedes especificar una configuración regional al crear el formato personalizado, para dar formato 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

Instrucciones

En este ejercicio vas a trabajar en un agendador de citas para un salón de belleza en Nueva York que abrió sus puertas el 15 de septiembre de 2012.

1. Convertir la fecha de una cita

Implementa el método AppointmentScheduler.schedule() para convertir una representación textual de la fecha de una cita al LocalDateTime correspondiente:

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

2. Comprobar si una cita ya pasó

Implementa el método AppointmentScheduler.hasPassed(), que recibe la fecha de una cita y comprueba si la cita quedó en algún momento del pasado:

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

3. Comprobar si la cita es por la tarde

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

4. Describir la fecha y la hora de la cita

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

5. Devolver la fecha del aniversario

Implementa el método AppointmentScheduler.getAnniversaryDate(), que devuelve la fecha del aniversario de este año, que es el 15 de septiembre:

AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.getAnniversaryDate()
// => LocalDate.of(<current year>, 9, 15)
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Java Exercism

¿Todo listo para empezar Citas para el salón de belleza?

Regístrate en Exercism para aprender y dominar Java con 26 conceptos158 ejercicios y mentoría humana real, todo gratis.