یک DateTime در F# شیئی تغییرناپذیر است که هم اطلاعات تاریخ و هم اطلاعات زمان را در خود دارد. نمونههای DateTime با فراخوانی متدهایشان دستکاری میشوند. وقتی یک DateTime ساخته شد، مقدارش هرگز تغییر نمیکند. هر متد یا تابعی که به نظر برسد یک DateTime را تغییر میدهد، در واقع یک DateTime تازه برمیگرداند.
نمایش متنی تاریخ و زمان به «فرهنگ» وابسته است. یک DateTime را در نظر بگیرید که تاریخش ۲۸ مارس ۲۰۱۹ و زمانش ۱۴:۳۰:۵۹ تنظیم شده است. اگر این DateTime را با فرهنگ en-US (انگلیسی آمریکایی) به string تبدیل کنید، نتیجه "3/28/19 2:30:59 PM" میشود. با فرهنگ fr-BE (فرانسوی بلژیکی) همان کد مقدار دیگری برمیگرداند: "28/03/19 14:30:59".
دانستن اینکه کدام متدهای DateTime به فرهنگ وابستهاند مهم است. به طور کلی، هر متد DateTime که با stringها سر و کار دارد (چه به عنوان ورودی و چه خروجی) به فرهنگ جاری وابسته است.
در این تمرین روی یک برنامهریز نوبتدهی برای یک سالن زیبایی در نیویورک کار میکنید که در ۱۵ سپتامبر ۲۰۱۲ افتتاح شد.
چهار وظیفه دارید که همهی آنها به تاریخهای نوبت مربوط میشوند. تاریخها و زمانها از یکی از این سه قالب زیر استفاده میکنند:
"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 را پیادهسازی کنید که یک تاریخ نوبت میگیرد و بررسی میکند آیا نوبت در بعدازظهر است (بزرگتر یا مساوی ۱۲:۰۰ و کوچکتر از ۱۸:۰۰):
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 را پیادهسازی کنید که تاریخ سالگرد امسال را برمیگرداند، یعنی ۱۵ سپتامبر:
anniversaryDate()
// => DateTime(2019, 9, 15, 0, 0, 0)