A .NET-ben az idő fogalmát a DateTime struktúrával kezeljük. Vannak rutinok a helyi idő és a UTC közötti átváltásra. Az aritmetikai műveleteket a TimeSpan segítségével végezhetjük el.
A TimeZoneInfo osztály rutinokat kínál az időzónák közötti eltérések kezelésére. A TimeZoneInfo osztály emellett olyan metódusokat is tartalmaz, amelyek megkönnyítik a nyári időszámítás kezelését.
A CultureInfo osztály támogatja a területi beállításoktól függő dátum- és időformátumokat.
A platformfüggetlen fejlesztés támogatásához a RuntimeInformation osztály segítségével felismerheted, hogy a kódod melyik operációs rendszeren fut: Linux, Windows vagy OSX.
Ebben a feladatban visszatérsz a szalonok világába (amelyek először a datetimes feladatban bukkantak fel). Ahogy több más projektjeidnél is történt, egy másik ügyfeled is nagy sikert ért el, és a New York-i bázisuk mellett Londonban és Párizsban is nyitott üzleteket.
Valósítsd meg a statikus Appointment.ShowLocalTime() metódust, amely átvesz egy UTC szerinti időt, és helyi időként adja vissza
// For a student in NY
Appointment.ShowLocalTime(new DateTime(2030, 7, 25, 13, 45, 0));
// => {2030, 7, 25, 8, 45, 0}
A szalonok maguk felelősek a saját foglalásaik felvételéért. A megadott idő a szalon helyszíne szerinti helyi idő. Ha például valaki 13:45-öt ad meg egy időpontra a New York-i szalonban, akkor azt várja, hogy az ügyfél éppen ebéd után érkezik meg. Hasonlóképpen, ha valaki 13:45-öt adna meg a londoni szalonhoz, ő is azt várná, hogy az ügyfél éppen ebéd után érkezik meg.
Hasznos lesz, ha ismered New York, London és Párizs időzóna-azonosítóját.
Macen (OSX) és Linuxon ezek a következők:
Windowson pedig ezek:
Valósítsd meg a statikus Appointment.Schedule() túlterhelést, amely átvesz egy helyszínt és egy időpontot leíró szöveget, és visszaadja az időpont UTC szerinti idejét.
A Schedule() megvalósításának lehetővé kell tennie, hogy a kód lefordítás után Linuxon, Windowson és Macen is fusson. Ez az első feladat, ahol foglalkoznod kell az operációs rendszerrel. Külön kódelágakra lesz szükség, hogy kezelni tudd az időzóna-azonosítók fent leírt eltéréseit.
A bemenetként kapott dátum-idő szövegek garantáltan érvényesek.
Appointment.Schedule("7/25/2030 13:45:00", Location.Paris);
// => {2030, 7, 25, 11, 45, 0}
Valósítsd meg a statikus Appointment.GetAlertTime() metódust, amely 1 nappal (korai), 1 óra 45 perccel (normál) és 30 perccel (késői) az időpont előtt küldi a figyelmeztetéseket.
Appointment.GetAlertTime(new DateTime(2030, 7, 25, 14, 45, 0), AlertLevel.Early);
// => {2030, 7, 24, 14, 45, 0}
Valósítsd meg a statikus Appointment.HasDaylightSavingChanged() metódust, amely true értéket ad vissza, ha a nyári időszámítás az elmúlt 7 napban aktívvá vagy inaktívvá vált.
Appointment.HasDaylightSavingChanged(new DateTime(2020, 3, 30, 14, 45, 0), Location.London);
// => true
Ahhoz, hogy az időpontokat a helyi személyzet számára ismerős formátumban lehessen megadni, az a feladatod, hogy készíts egy kísérleti rutint, amellyel a dátumok és az időpontok a szalon helyszínének megfelelő alapértelmezett formátumban adhatók meg.
Valósítsd meg az Appointment.NormalizeDateTime() metódust, amely átvesz egy jól formázott, a helyszínhez illő formátumú dátum-idő szöveget, és DateTime objektummá alakítja. A dátum-idő UTC szerinti idővé alakítására nem teszünk kísérletet.
Ha hibás formátumot adnak meg, akkor egy 1/1/1 értékű DateTime objektumot kell visszaadni.
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}
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) C# nyelvet 62 fogalom178 feladat segítségével, valódi emberi mentorálással, mindez ingyen.