Das Konzept Zeit wird in .NET mithilfe der DateTime-Struktur behandelt. Es gibt Routinen, um zwischen lokaler Zeit und UTC umzurechnen. Mit TimeSpan lassen sich arithmetische Operationen durchführen.
Die Klasse TimeZoneInfo bietet Routinen für den Umgang mit den Unterschieden zwischen Zeitzonen. Außerdem enthält sie Methoden, die den Umgang mit der Sommerzeit erleichtern.
Die Klasse CultureInfo unterstützt gebietsschemaabhängige Datums- und Zeitformate.
Um plattformübergreifende Programmierung zu unterstützen, kannst du mit der Klasse RuntimeInformation erkennen, auf welchem Betriebssystem dein Code läuft: Linux, Windows oder OSX.
In dieser Übung bist du zurück in der Welt der Salons (zuerst vorgestellt in der Übung datetimes). Wie bei einigen deiner Projekte hat ein weiterer deiner Kunden großen Erfolg gehabt und neben seinem Standort in New York auch Filialen in London und Paris eröffnet.
Implementiere die statische Methode Appointment.ShowLocalTime(), die eine UTC-Zeit entgegennimmt und sie als lokale Zeit zurückgibt
// For a student in NY
Appointment.ShowLocalTime(new DateTime(2030, 7, 25, 13, 45, 0));
// => {2030, 7, 25, 8, 45, 0}
Die Salons sind dafür verantwortlich, ihre eigenen Termine anzunehmen. Die eingegebene Zeit bezieht sich auf den Standort des Salons. Wenn zum Beispiel jemand für einen Termin im New Yorker Salon die Zeit 13:45 eingibt, würde man erwarten, dass die Kundin kurz nach dem Mittagessen auftaucht. Wenn jemand für den Londoner Salon die Zeit 13:45 eingäbe, würde man ebenfalls erwarten, dass die Kundin kurz nach dem Mittagessen eintrifft.
Es hilft dir zu wissen, wie die Zeitzonen-ID für New York, London und Paris lautet.
Auf dem Mac (OSX) und Linux sind das:
Unter Windows sind es:
Implementiere die statische Überladung Appointment.Schedule(), die einen Standort und einen Zeit-String entgegennimmt und die UTC-Zeit des Termins zurückgibt.
Die Implementierung von Schedule() muss es dem Code ermöglichen, nach dem Bauen unter Linux, Windows und Mac zu laufen. Das ist die erste Übung, in der du dich um das Betriebssystem kümmern musst. Es wird notwendig sein, getrennte Codepfade zu haben, um den Unterschied bei den Zeitzonen-IDs wie oben beschrieben zu berücksichtigen.
Die eingegebenen Datums- und Zeit-Strings sind garantiert gültig.
Appointment.Schedule("7/25/2030 13:45:00", Location.Paris);
// => {2030, 7, 25, 11, 45, 0}
Implementiere die statische Methode Appointment.GetAlertTime(), um Benachrichtigungen 1 Tag (early), 1 Stunde 45 Minuten (standard) und 30 Minuten (late) vor dem Termin zu senden.
Appointment.GetAlertTime(new DateTime(2030, 7, 25, 14, 45, 0), AlertLevel.Early);
// => {2030, 7, 24, 14, 45, 0}
Implementiere die statische Methode Appointment.HasDaylightSavingChanged(), die true zurückgibt, wenn die Sommerzeit in den letzten 7 Tagen aktiv oder inaktiv geworden ist.
Appointment.HasDaylightSavingChanged(new DateTime(2020, 3, 30, 14, 45, 0), Location.London);
// => true
Damit Termine in einem Format vereinbart werden können, das dem lokalen Personal vertraut ist, wurdest du damit beauftragt, eine experimentelle Routine zu erstellen, mit der Datum und Uhrzeit im Standardformat für den Standort des Salons eingegeben werden können.
Implementiere die Methode Appointment.NormalizeDateTime(), die einen wohlgeformten Datums- und Zeit-String in einem für den Standort passenden Format entgegennimmt und ihn in ein DateTime-Objekt umwandelt. Es wird nicht versucht, das Datum und die Uhrzeit in UTC umzuwandeln.
Wenn ein ungültiges Format eingegeben wird, sollte ein DateTime mit dem Wert 1/1/1 zurückgegeben werden.
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}
Melde dich bei Exercism an, um C# mit 62 Konzepte178 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.