مسیرها
/
C#
C#
/
تمرین‌ها
/
سالن زیبایی جهانی می‌شود
سالن زیبایی جهانی می‌شود

سالن زیبایی جهانی می‌شود

تمرین یادگیری

مقدمه

زمان

مفهوم زمان در .NET با استفاده از ساختار DateTime بررسی می‌شود. روال‌هایی برای تبدیل بین زمان محلی و UTC وجود دارد. محاسبات را می‌توان به کمک TimeSpan انجام داد.

منطقه‌ی زمانی

کلاس TimeZoneInfo روال‌هایی برای مدیریت تفاوت‌های میان مناطق زمانی ارائه می‌دهد. کلاس TimeZoneInfo همچنین متدهایی دارد که کار با ساعت تابستانی را آسان می‌کنند.

کلاس CultureInfo از قالب‌های تاریخ و زمان وابسته به فرهنگ پشتیبانی می‌کند.

برای پشتیبانی از کدنویسی چندسکویی، کلاس RuntimeInformation به شما امکان می‌دهد تشخیص دهید کد شما روی کدام سیستم‌عامل اجرا می‌شود: Linux، Windows یا OSX.

دستورالعمل‌ها

در این تمرین دوباره به دنیای سالن‌ها برگشته‌اید (که نخستین بار در تمرین datetimes معرفی شد). مانند چند مورد از پروژه‌هایتان، یکی دیگر از مشتریان شما موفقیت زیادی کسب کرده و علاوه بر مرکز اصلی‌اش در نیویورک، شعبه‌هایی در لندن و پاریس باز کرده است.

1. معادل‌های زمان محلی نوبت‌های UTC (زمان جهانی هماهنگ) را برای مدیران فراهم کنید

متد استاتیک Appointment.ShowLocalTime() را پیاده‌سازی کنید که یک زمان UTC می‌گیرد و آن را به‌صورت زمان محلی برمی‌گرداند

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

2. نوبت‌ها را در نیویورک، لندن و پاریس زمان‌بندی کنید

سالن‌ها خودشان مسئول ثبت نوبت‌هایشان هستند. زمان ورودی نسبت به موقعیت سالن محلی است. برای نمونه، اگر کسی برای سالن نیویورک زمانی مانند ۱۳:۴۵ را برای یک نوبت وارد کند، انتظار دارد مشتری کمی بعد از ناهار بیاید. به همین ترتیب، اگر کسی برای سالن لندن زمانی مانند ۱۳:۴۵ وارد کند، او هم انتظار دارد مشتری کمی بعد از ناهار برسد.

دانستن شناسه‌ی منطقه‌ی زمانی نیویورک، لندن و پاریس به شما کمک می‌کند.

روی Mac (OSX) و Linux این‌ها عبارت‌اند از:

  • نیویورک - America/New_York
  • لندن - Europe/London
  • پاریس - Europe/Paris

روی Windows، این‌ها عبارت‌اند از:

  • نیویورک - Eastern Standard Time
  • لندن - GMT Standard Time
  • پاریس - W. Europe Standard Time

یک overload از متد استاتیک Appointment.Schedule() را پیاده‌سازی کنید که یک مکان و رشته‌ی زمان می‌گیرد و زمان UTC نوبت را برمی‌گرداند.

پیاده‌سازی Schedule() باید طوری باشد که کد، پس از ساخت، روی Linux، Windows و Mac اجرا شود. این نخستین تمرینی است که باید نگران سیستم‌عامل باشید. لازم است مسیرهای کد جداگانه‌ای داشته باشید تا تفاوت شناسه‌های منطقه‌ی زمانی که در بالا توضیح داده شد را پوشش دهید.

از معتبر بودن رشته‌های تاریخ-زمان ورودی اطمینان داریم.

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

3. هشدارهایی را در بازه‌های پیش از نوبت به مشتریان ارائه دهید

متد استاتیک Appointment.GetAlertTime() را پیاده‌سازی کنید تا هشدارها را ۱ روز (early)، ۱ ساعت و ۴۵ دقیقه (standard) و ۳۰ دقیقه (late) پیش از نوبت ارائه دهد.

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

4. اگر ساعت تابستانی به‌تازگی تغییر کرده باشد، پیامی برای یادآوری به مشتریان می‌فرستیم.

متد استاتیک Appointment.HasDaylightSavingChanged() را پیاده‌سازی کنید تا اگر ساعت تابستانی در ۷ روز گذشته فعال یا غیرفعال شده باشد، true برگرداند.

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

5. برای وارد کردن نوبت‌ها از قالب تاریخ و زمان محلی استفاده کنید

برای اینکه نوبت‌ها بتوانند با قالبی آشنا برای کارکنان محلی ثبت شوند، به شما مأموریت داده شده است که یک رویه‌ی آزمایشی بسازید تا تاریخ‌ها و زمان‌ها بتوانند با قالب پیش‌فرض موقعیت سالن وارد شوند.

متد Appointment.NormalizeDateTime() را پیاده‌سازی کنید که یک رشته‌ی تاریخ-زمان خوش‌ساخت با قالبی متناسب با موقعیت می‌گیرد و آن را به یک شیء DateTime تبدیل می‌کند. هیچ تلاشی برای تبدیل تاریخ-زمان به UTC انجام نمی‌شود.

اگر قالب نامعتبری وارد شود، باید یک 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 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.