يتعامل .NET مع مفهوم الوقت باستخدام البنية DateTime. وهناك إجراءات للتحويل بين التوقيت المحلي والتوقيت العالمي المنسق (UTC). ويمكن إجراء العمليات الحسابية بمساعدة TimeSpan.
يوفر الصنف TimeZoneInfo إجراءات للتعامل مع الفروق بين المناطق الزمنية. كما يحتوي الصنف TimeZoneInfo على طرق تسهّل التعامل مع التوقيت الصيفي.
ويدعم الصنف CultureInfo تنسيقات التاريخ والوقت المعتمدة على الإعدادات المحلية.
وللدعم البرمجة عبر الأنظمة الأساسية، يتيح لك الصنف RuntimeInformation معرفة نظام التشغيل الذي يعمل عليه الكود: Linux أو Windows أو OSX.
في هذا التمرين تعود إلى عالم الصالونات (الذي تعرّفت عليه أول مرة في تمرين datetimes). وكما حدث في عدد من مشاريعك، حقّق أحد عملائك الآخرين نجاحًا كبيرًا وافتتح فروعًا في لندن وباريس بالإضافة إلى مقره في نيويورك.
نفّذ الطريقة الساكنة Appointment.ShowLocalTime() التي تأخذ وقتًا بالتوقيت العالمي المنسق وتُرجعه كوقت محلي
// For a student in NY
Appointment.ShowLocalTime(new DateTime(2030, 7, 25, 13, 45, 0));
// => {2030, 7, 25, 8, 45, 0}
الصالونات مسؤولة عن حجز مواعيدها بنفسها. والوقت المُدخل محلي بحسب موقع الصالون. فمثلًا، إذا أدخل شخص وقت 13:45 لموعد في صالون نيويورك، فسيتوقع أن يحضر العميل بعد الغداء مباشرة. وبالمثل، إذا أدخل شخص وقت 13:45 لصالون لندن فسيتوقع أيضًا أن يصل العميل بعد الغداء مباشرة.
سيساعدك أن تعرف معرّف المنطقة الزمنية لكل من نيويورك ولندن وباريس.
على Mac (OSX) و Linux تكون هذه:
وعلى Windows تكون:
نفّذ النسخة المحمّلة من الطريقة الساكنة Appointment.Schedule() التي تأخذ موقعًا ووقتًا على شكل سلسلة نصية وتُرجع وقت الموعد بالتوقيت العالمي المنسق.
سيحتاج تنفيذ Schedule() إلى أن يسمح بتشغيل الكود، بعد بنائه، على Linux و Windows و Mac. وهذا أول تمرين تحتاج فيه إلى مراعاة نظام التشغيل. وسيكون من الضروري وجود مسارات منفصلة في الكود لاستيعاب الفرق في معرّفات المناطق الزمنية كما هو موضح أعلاه.
نضمن أن سلاسل التاريخ والوقت المُدخلة صحيحة.
Appointment.Schedule("7/25/2030 13:45:00", Location.Paris);
// => {2030, 7, 25, 11, 45, 0}
نفّذ الطريقة الساكنة Appointment.GetAlertTime() لإرسال التنبيهات قبل الموعد بمقدار يوم واحد (مبكر)، وساعة و45 دقيقة (قياسي)، و30 دقيقة (متأخر).
Appointment.GetAlertTime(new DateTime(2030, 7, 25, 14, 45, 0), AlertLevel.Early);
// => {2030, 7, 24, 14, 45, 0}
نفّذ الطريقة الساكنة Appointment.HasDaylightSavingChanged() لتُرجع true إذا أصبح التوقيت الصيفي نشطًا أو غير نشط خلال آخر 7 أيام.
Appointment.HasDaylightSavingChanged(new DateTime(2020, 3, 30, 14, 45, 0), Location.London);
// => true
لكي يمكن تحديد المواعيد بتنسيق مألوف للموظفين المحليين، أُوكِل إليك إنشاء إجراء تجريبي يسمح بإدخال التواريخ والأوقات بالتنسيق الافتراضي الخاص بموقع الصالون.
نفّذ الطريقة Appointment.NormalizeDateTime() التي تأخذ سلسلة تاريخ ووقت سليمة الصياغة بتنسيق مناسب للموقع وتحوّلها إلى كائن DateTime. ولا تُجرى أي محاولة لتحويل التاريخ والوقت إلى التوقيت العالمي المنسق.
إذا أُدخل تنسيق غير صالح، فيجب إرجاع كائن DateTime بقيمة 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}
سجّل في Exercism لتتعلّم وتتقن C# عبر 62 مفهومًا178 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.