المسارات
/
C#
C#
/
التمارين
/
صالون التجميل يتوسّع عالميًا
صالون التجميل يتوسّع عالميًا

صالون التجميل يتوسّع عالميًا

تمرين تعلّمي

مقدمة

الوقت

يتعامل .NET مع مفهوم الوقت باستخدام البنية DateTime. وهناك إجراءات للتحويل بين التوقيت المحلي والتوقيت العالمي المنسق (UTC). ويمكن إجراء العمليات الحسابية بمساعدة TimeSpan.

المنطقة الزمنية

يوفر الصنف TimeZoneInfo إجراءات للتعامل مع الفروق بين المناطق الزمنية. كما يحتوي الصنف TimeZoneInfo على طرق تسهّل التعامل مع التوقيت الصيفي.

ويدعم الصنف CultureInfo تنسيقات التاريخ والوقت المعتمدة على الإعدادات المحلية.

وللدعم البرمجة عبر الأنظمة الأساسية، يتيح لك الصنف RuntimeInformation معرفة نظام التشغيل الذي يعمل عليه الكود: Linux أو Windows أو OSX.

التعليمات

في هذا التمرين تعود إلى عالم الصالونات (الذي تعرّفت عليه أول مرة في تمرين datetimes). وكما حدث في عدد من مشاريعك، حقّق أحد عملائك الآخرين نجاحًا كبيرًا وافتتح فروعًا في لندن وباريس بالإضافة إلى مقره في نيويورك.

1. توفير الأوقات المحلية المقابلة لمواعيد التوقيت العالمي المنسق (UTC) للمسؤولين

نفّذ الطريقة الساكنة Appointment.ShowLocalTime() التي تأخذ وقتًا بالتوقيت العالمي المنسق وتُرجعه كوقت محلي

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

2. جدولة المواعيد في نيويورك ولندن وباريس

الصالونات مسؤولة عن حجز مواعيدها بنفسها. والوقت المُدخل محلي بحسب موقع الصالون. فمثلًا، إذا أدخل شخص وقت 13:45 لموعد في صالون نيويورك، فسيتوقع أن يحضر العميل بعد الغداء مباشرة. وبالمثل، إذا أدخل شخص وقت 13:45 لصالون لندن فسيتوقع أيضًا أن يصل العميل بعد الغداء مباشرة.

سيساعدك أن تعرف معرّف المنطقة الزمنية لكل من نيويورك ولندن وباريس.

على Mac (OSX) و Linux تكون هذه:

  • نيويورك - America/New_York
  • لندن - Europe/London
  • باريس - Europe/Paris

وعلى Windows تكون:

  • نيويورك - Eastern Standard Time
  • لندن - GMT Standard Time
  • باريس - W. Europe Standard Time

نفّذ النسخة المحمّلة من الطريقة الساكنة Appointment.Schedule() التي تأخذ موقعًا ووقتًا على شكل سلسلة نصية وتُرجع وقت الموعد بالتوقيت العالمي المنسق.

سيحتاج تنفيذ Schedule() إلى أن يسمح بتشغيل الكود، بعد بنائه، على Linux و Windows و Mac. وهذا أول تمرين تحتاج فيه إلى مراعاة نظام التشغيل. وسيكون من الضروري وجود مسارات منفصلة في الكود لاستيعاب الفرق في معرّفات المناطق الزمنية كما هو موضح أعلاه.

نضمن أن سلاسل التاريخ والوقت المُدخلة صحيحة.

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

3. إرسال تنبيهات إلى العملاء على فترات قبل الموعد

نفّذ الطريقة الساكنة Appointment.GetAlertTime() لإرسال التنبيهات قبل الموعد بمقدار يوم واحد (مبكر)، وساعة و45 دقيقة (قياسي)، و30 دقيقة (متأخر).

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

4. إذا تغيّر التوقيت الصيفي مؤخرًا نرسل رسالة تذكير إلى العملاء.

نفّذ الطريقة الساكنة Appointment.HasDaylightSavingChanged() لتُرجع true إذا أصبح التوقيت الصيفي نشطًا أو غير نشط خلال آخر 7 أيام.

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

5. استخدام تنسيق التاريخ والوقت المحلي لإدخال المواعيد

لكي يمكن تحديد المواعيد بتنسيق مألوف للموظفين المحليين، أُوكِل إليك إنشاء إجراء تجريبي يسمح بإدخال التواريخ والأوقات بالتنسيق الافتراضي الخاص بموقع الصالون.

نفّذ الطريقة 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}
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
C# Exercism

مستعد لبدء صالون التجميل يتوسّع عالميًا؟

سجّل في Exercism لتتعلّم وتتقن C# عبر 62 مفهومًا178 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.