En .NET, le concept de temps est traité à l'aide de la structure DateTime. Il existe des routines pour convertir entre l'heure locale et UTC. On peut effectuer des calculs arithmétiques à l'aide de TimeSpan.
La classe TimeZoneInfo fournit des routines pour gérer les différences entre les fuseaux horaires. La classe TimeZoneInfo contient aussi des méthodes qui facilitent la gestion de l'heure d'été.
La classe CultureInfo prend en charge les formats de date et d'heure qui dépendent de la locale.
Pour permettre le développement multiplateforme, la classe RuntimeInformation permet de détecter sur quel système d'exploitation le code s'exécute : Linux, Windows ou OSX.
Dans cet exercice, tu retrouves l'univers des salons (introduits pour la première fois dans l'exercice datetimes). Comme pour un certain nombre de tes projets, un autre de tes clients a connu un grand succès et a ouvert des succursales à Londres et à Paris, en plus de son siège de New York.
Implémente la méthode statique Appointment.ShowLocalTime() qui prend une heure UTC et la renvoie sous forme d'heure locale
// For a student in NY
Appointment.ShowLocalTime(new DateTime(2030, 7, 25, 13, 45, 0));
// => {2030, 7, 25, 8, 45, 0}
Chaque salon est responsable de ses propres réservations. L'heure saisie est locale au lieu où se trouve le salon. Par exemple, si quelqu'un saisit une heure de 13:45 pour un rendez-vous au salon de New York, il s'attend à ce que le client arrive juste après le déjeuner. De même, si quelqu'un saisissait une heure de 13:45 pour le salon de Londres, il s'attendrait aussi à ce que le client arrive juste après le déjeuner.
Il te sera utile de connaître l'identifiant de fuseau horaire de New York, Londres et Paris.
Sur Mac (OSX) et Linux, ce sont :
Sur Windows, ce sont :
Implémente la surcharge statique Appointment.Schedule() qui prend une chaîne de lieu et une chaîne d'heure et renvoie l'heure UTC du rendez-vous.
Une fois compilée, l'implémentation de Schedule() devra pouvoir être exécutée sur Linux, Windows et Mac. C'est le premier exercice où tu dois te soucier du système d'exploitation. Il sera nécessaire de prévoir des chemins de code distincts pour tenir compte de la différence entre les identifiants de fuseau horaire décrite ci-dessus.
Les chaînes de date et d'heure saisies sont garanties valides.
Appointment.Schedule("7/25/2030 13:45:00", Location.Paris);
// => {2030, 7, 25, 11, 45, 0}
Implémente la méthode statique Appointment.GetAlertTime() pour envoyer des alertes 1 jour (early), 1 heure 45 minutes (standard) et 30 minutes (late) avant le rendez-vous.
Appointment.GetAlertTime(new DateTime(2030, 7, 25, 14, 45, 0), AlertLevel.Early);
// => {2030, 7, 24, 14, 45, 0}
Implémente la méthode statique Appointment.HasDaylightSavingChanged() pour renvoyer true si l'heure d'été est devenue active ou inactive au cours des 7 derniers jours.
Appointment.HasDaylightSavingChanged(new DateTime(2020, 3, 30, 14, 45, 0), Location.London);
// => true
Pour que les rendez-vous puissent être pris dans un format familier au personnel local, on t'a chargé de créer une routine expérimentale permettant de saisir les dates et les heures dans le format par défaut du lieu où se trouve le salon.
Implémente la méthode Appointment.NormalizeDateTime() qui prend une chaîne de date et d'heure bien formée, dans un format adapté au lieu, et la convertit en un objet DateTime. Aucune tentative n'est faite pour convertir la date et l'heure en UTC.
Si un format incorrect est saisi, il faut renvoyer un DateTime avec la valeur 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}
Inscris-toi sur Exercism pour apprendre et maîtriser C# avec 62 concepts178 exercices, et un vrai mentorat humain, le tout gratuitement.