Track
/
C#
C#
/
Esercizi
/
Il salone di bellezza diventa globale
Il salone di bellezza diventa globale

Il salone di bellezza diventa globale

Esercizio di apprendimento

Introduzione

Tempo

Il concetto di tempo viene trattato in .NET tramite la struttura DateTime. Esistono routine per convertire tra ora locale e UTC. Le operazioni aritmetiche possono essere eseguite con l'aiuto di TimeSpan.

Fuso orario

La classe TimeZoneInfo fornisce routine per gestire le differenze tra fusi orari. La classe TimeZoneInfo contiene anche metodi che facilitano la gestione dell'ora legale.

La classe CultureInfo supporta formati di data e ora dipendenti dalle impostazioni locali.

Per supportare la programmazione multipiattaforma, la classe RuntimeInformation consente di rilevare su quale sistema operativo è in esecuzione il codice: Linux, Windows o OSX.

Istruzioni

In questo esercizio tornerai nel mondo dei saloni (introdotto per la prima volta nell'esercizio datetimes). Come per diversi altri tuoi progetti, un altro dei tuoi clienti ha avuto un grande successo e ha aperto filiali a Londra e Parigi, oltre alla sede di New York.

1. Fornisci agli amministratori gli equivalenti in ora locale degli appuntamenti in UTC (tempo coordinato universale)

Implementa il metodo statico Appointment.ShowLocalTime(), che prende un orario UTC e lo restituisce come ora locale

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

2. Pianifica gli appuntamenti a New York, Londra e Parigi

I saloni sono responsabili delle proprie prenotazioni. L'orario inserito è locale rispetto alla sede del salone. Per esempio, se qualcuno inserisce le 13:45 per un appuntamento al salone di New York, si aspetta che il cliente si presenti subito dopo pranzo. Allo stesso modo, se qualcuno inserisse le 13:45 per il salone di Londra, si aspetterebbe che il cliente arrivi subito dopo pranzo.

Ti sarà utile conoscere l'id del fuso orario di New York, Londra e Parigi.

Su Mac (OSX) e Linux sono:

  • New York: America/New_York
  • Londra: Europe/London
  • Parigi: Europe/Paris

Su Windows sono:

  • New York: Eastern Standard Time
  • Londra: GMT Standard Time
  • Parigi: W. Europe Standard Time

Implementa l'overload statico Appointment.Schedule(), che prende una località e una stringa di data e ora e restituisce l'orario UTC dell'appuntamento.

L'implementazione di Schedule() dovrà permettere al codice, una volta compilato, di essere eseguito su Linux, Windows e Mac. Questo è il primo esercizio in cui devi preoccuparti del sistema operativo. Sarà necessario avere percorsi di codice separati per gestire la differenza tra gli id dei fusi orari descritta sopra.

Si garantisce che le stringhe di data e ora fornite in input siano valide.

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

3. Fornisci avvisi ai clienti a intervalli prima dell'appuntamento

Implementa il metodo statico Appointment.GetAlertTime() per fornire avvisi 1 giorno (early), 1 ora e 45 minuti (standard) e 30 minuti (late) prima dell'appuntamento.

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

4. Se l'ora legale è cambiata di recente, inviamo ai clienti un messaggio per ricordarglielo.

Implementa il metodo statico Appointment.HasDaylightSavingChanged() per restituire true se l'ora legale è diventata attiva o inattiva negli ultimi 7 giorni.

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

5. Usa il formato di data e ora locale per inserire gli appuntamenti

Perché gli appuntamenti possano essere presi in un formato familiare al personale locale, ti è stato affidato il compito di creare una routine sperimentale che permetta di inserire date e orari nel formato predefinito per la sede del salone.

Implementa il metodo Appointment.NormalizeDateTime(), che prende una stringa di data e ora ben formata in un formato appropriato alla località e la converte in un oggetto DateTime. Non si tenta di convertire la data e ora in UTC.

Se viene inserito un formato errato, va restituito un DateTime con valore 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}
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
C# Exercism

Vuoi iniziare Il salone di bellezza diventa globale?

Iscriviti a Exercism per imparare e padroneggiare C# con 62 concetti178 esercizi e il mentoring di persone reali, tutto gratis.