كائن DateTime في F# هو كائن غير قابل للتغيير يحتوي على معلومات التاريخ و الوقت. يتم التعامل مع كائنات DateTime عبر استدعاء طرقها. بمجرد إنشاء DateTime، لا يمكن أن تتغير قيمته أبدًا. أي طرق/دوال تبدو وكأنها تعدل DateTime ستُرجع في الواقع DateTime جديدًا.
يعتمد التمثيل النصي للتواريخ والأوقات على الثقافة. لنأخذ DateTime تاريخه مضبوطًا على 28 مارس 2019 ووقته مضبوطًا على 14:30:59. عند تحويل هذا DateTime إلى string باستخدام ثقافة en-US (الإنجليزية الأمريكية)، فإن الناتج هو "3/28/19 2:30:59 PM". وعند استخدام ثقافة fr-BE (الفرنسية البلجيكية)، يُرجع الكود نفسه قيمة مختلفة: "28/03/19 14:30:59".
من المهم أن نفهم أي طرق DateTime تعتمد على الثقافة. بشكل عام، أي طريقة DateTime تتعامل مع strings (إما كمدخل أو كمخرج) ستكون معتمدة على الثقافة الحالية.
في هذا التمرين، ستعمل على مُنظّم مواعيد لصالون تجميل في نيويورك افتُتح في 15 سبتمبر 2012.
لديك أربع مهام، وكلها تتعلق بتواريخ المواعيد. ستستخدم التواريخ والأوقات واحدة من الصيغ الثلاث التالية:
"7/25/2019 13:45:00""July 25, 2019 13:45:00""Thursday, July 25, 2019 13:45:00:00"ستضبط الاختبارات الإعدادات الثقافية تلقائيًا على en-US، فلا حاجة إلى ضبط الإعدادات الثقافية أو تحديدها بنفسك.
نفّذ الدالة schedule التي يمكنها تحليل تمثيل نصي لتاريخ موعد إلى صيغة DateTime المقابلة:
schedule "7/25/2019 13:45:00"
// => DateTime(2019, 7, 25, 13, 45, 0)
نفّذ الدالة hasPassed التي تأخذ تاريخ موعد وتتحقق مما إذا كان الموعد قد وقع في الماضي:
hasPassed (DateTime(1999, 12, 31, 9, 0, 0))
// => true
نفّذ الدالة isAfternoonAppointment التي تأخذ تاريخ موعد وتتحقق مما إذا كان الموعد بعد الظهر (>= 12:00 و < 18:00):
isAfternoonAppointment (DateTime(2019, 03, 29, 15, 0, 0))
// => true
نفّذ الدالة description التي تأخذ تاريخ موعد وتُرجع وصفًا لذلك التاريخ والوقت:
description (DateTime(2019, 03, 29, 15, 0, 0))
// => "You have an appointment on 3/29/2019 3:00:00 PM."
نفّذ الدالة anniversaryDate التي تُرجع تاريخ الذكرى السنوية لهذا العام، وهو 15 سبتمبر:
anniversaryDate()
// => DateTime(2019, 9, 15, 0, 0, 0)
سجّل في Exercism لتتعلّم وتتقن F# عبر 18 مفهومًا148 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.