Tracks
/
C#
C#
/
Ejercicios
/
El salón de belleza se globaliza
El salón de belleza se globaliza

El salón de belleza se globaliza

Ejercicio de aprendizaje

Introducción

Tiempo

El concepto de tiempo se maneja en .NET con la estructura DateTime. Hay rutinas para convertir entre la hora local y UTC. Puedes realizar operaciones aritméticas con la ayuda de TimeSpan.

Zona horaria

La clase TimeZoneInfo proporciona rutinas para manejar las diferencias entre zonas horarias. La clase TimeZoneInfo también contiene métodos que facilitan el trabajo con el horario de verano.

La clase CultureInfo admite formatos de fecha y hora que dependen de la configuración regional.

Para admitir la programación multiplataforma, la clase RuntimeInformation te permite detectar en qué sistema operativo se ejecuta tu código: Linux, Windows u OSX.

Instrucciones

En este ejercicio vuelves al mundo de los salones (presentados por primera vez en el ejercicio datetimes). Como ha pasado con varios de tus proyectos, otro de tus clientes ha tenido mucho éxito y abrió sucursales en Londres y París, además de su base en Nueva York.

1. Proporciona a los administradores los equivalentes en hora local de las citas en UTC (tiempo universal coordinado)

Implementa el método estático Appointment.ShowLocalTime() que recibe una hora UTC y la devuelve como hora local.

// For a student in NY
Appointment.ShowLocalTime(new DateTime(2030, 7, 25, 13, 45, 0));
// => {2030, 7, 25, 8, 45, 0}

2. Programa citas en Nueva York, Londres y París

Los salones son responsables de tomar sus propias reservas. La hora que se ingresa es local a la ubicación del salón. Por ejemplo, si alguien ingresa una hora de 13:45 para el salón de Nueva York para una cita, esperaría que el cliente llegue justo después del almuerzo. De manera similar, si alguien ingresa una hora de 13:45 para el salón de Londres, también esperaría que el cliente llegue justo después del almuerzo.

Te será útil conocer el id de la zona horaria de Nueva York, Londres y París.

En Mac (OSX) y Linux son:

  • Nueva York - America/New_York
  • Londres - Europe/London
  • París - Europe/Paris

En Windows, son:

  • Nueva York - Eastern Standard Time
  • Londres - GMT Standard Time
  • París - W. Europe Standard Time

Implementa la sobrecarga estática Appointment.Schedule() que recibe una ubicación y un string de hora y devuelve la hora UTC de la cita.

La implementación de Schedule() tendrá que permitir que el código, una vez compilado, se ejecute en Linux, Windows y Mac. Este es el primer ejercicio en el que debes preocuparte por el sistema operativo. Será necesario tener rutas de código separadas para acomodar la diferencia en los ids de las zonas horarias como se describió arriba.

Se garantiza que los strings de fecha y hora que se ingresan son válidos.

Appointment.Schedule("7/25/2030 13:45:00", Location.Paris);
// => {2030, 7, 25, 11, 45, 0}

3. Proporciona alertas a los clientes en intervalos antes de la cita

Implementa el método estático Appointment.GetAlertTime() para proporcionar alertas a 1 día (temprana), 1 hora 45 minutos (estándar) y 30 minutos (tardía) antes de la cita.

Appointment.GetAlertTime(new DateTime(2030, 7, 25, 14, 45, 0), AlertLevel.Early);
// => {2030, 7, 24, 14, 45, 0}

4. Si el horario de verano cambió hace poco, enviamos un mensaje a los clientes para recordárselo.

Implementa el método estático Appointment.HasDaylightSavingChanged() para que devuelva true si el horario de verano se volvió activo o inactivo en los últimos 7 días.

Appointment.HasDaylightSavingChanged(new DateTime(2020, 3, 30, 14, 45, 0), Location.London);
// => true

5. Usa el formato local de fecha y hora para ingresar citas

Para que las citas se puedan hacer en un formato familiar para el personal local, se te ha encargado crear una rutina experimental que permita ingresar fechas y horas en el formato predeterminado para la ubicación del salón.

Implementa el método Appointment.NormalizeDateTime() que recibe un string de fecha y hora bien formado en un formato apropiado para la ubicación y lo convierte en un objeto DateTime. No se intenta convertir la fecha y hora a UTC.

Si se ingresa un formato incorrecto, se debe devolver un DateTime con un valor de 1/1/1.

Appointment.NormalizeDateTime("25/11/2019 13:45:00", Location.London);
// => {2019, 11, 25, 13, 45, 0}
Appointment.NormalizeDateTime("25/11/2019 13:45:00", Location.NewYork);
// => {1, 1, 1, 0, 0, 0}
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
C# Exercism

¿Todo listo para empezar El salón de belleza se globaliza?

Regístrate en Exercism para aprender y dominar C# con 62 conceptos178 ejercicios y mentoría humana real, todo gratis.