ট্র্যাক
/
C#
C#
/
অনুশীলনী
/
বিউটি পার্লার বিশ্বজুড়ে
বিউটি পার্লার বিশ্বজুড়ে

বিউটি পার্লার বিশ্বজুড়ে

লার্নিং অনুশীলনী

ভূমিকা

সময়

.NET-এ সময়-এর ধারণাটি নিয়ে কাজ করা হয় DateTime স্ট্রাক্ট দিয়ে। স্থানীয় সময় আর UTC-এর মধ্যে রূপান্তর করার রুটিন রয়েছে। TimeSpan-এর সাহায্যে গাণিতিক হিসাব করা যায়।

টাইমজোন

TimeZoneInfo ক্লাসটি নানা টাইমজোনের মধ্যকার পার্থক্য সামলানোর রুটিন দেয়। TimeZoneInfo ক্লাসে এমন মেথডও আছে যা ডেলাইট সেভিং টাইম নিয়ে কাজ করা সহজ করে তোলে।

CultureInfo ক্লাসটি লোকেল-নির্ভর তারিখ ও সময়ের ফরম্যাট সমর্থন করে।

ক্রস-প্ল্যাটফর্ম কোডিং সমর্থন করার জন্য RuntimeInformation ক্লাসটি দিয়ে আপনি বুঝতে পারবেন আপনার কোড কোন অপারেটিং সিস্টেমে চলছে, Linux, Windows বা OSX.

নির্দেশনা

এই অনুশীলনীতে আপনি আবার সেলুনের জগতে ফিরে এসেছেন (যার পরিচয় প্রথম পাওয়া গিয়েছিল datetimes অনুশীলনীতে)। আপনার আরও কিছু প্রজেক্টের মতোই, আপনার আরেকজন ক্লায়েন্টও দারুণ সফল হয়েছে এবং নিউ ইয়র্কের কেন্দ্র ছাড়াও লন্ডন ও প্যারিসে শাখা খুলেছে।

1. প্রশাসকদের জন্য UTC (Universal Coordinated Time) অ্যাপয়েন্টমেন্টের স্থানীয় সময়ের সমতুল্য রূপ প্রদান করা

static 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. নিউ ইয়র্ক, লন্ডন ও প্যারিসে অ্যাপয়েন্টমেন্ট নির্ধারণ করা

নিজেদের বুকিং নেওয়ার দায়িত্ব সেলুনগুলোর নিজেরই। ইনপুট দেওয়া সময় সেলুনটি যে স্থানে আছে, সেই স্থানের স্থানীয় সময় হিসেবে ধরা হয়। উদাহরণস্বরূপ, কেউ যদি নিউ ইয়র্কের সেলুনের জন্য অ্যাপয়েন্টমেন্টের সময় 13:45 লিখে দেন, তাহলে তিনি আশা করবেন ক্লায়েন্ট ঠিক লাঞ্চের পরে এসে পৌঁছাবেন। একইভাবে, কেউ যদি লন্ডনের সেলুনের জন্য 13:45 সময় লিখতেন, তিনিও আশা করতেন ক্লায়েন্ট লাঞ্চের ঠিক পরেই পৌঁছাবে।

নিউ ইয়র্ক, লন্ডন আর প্যারিসের টাইম জোন আইডি জানা থাকলে আপনার কাজে লাগবে।

Mac (OSX) ও Linux-এ এগুলো হলো:

  • New York - America/New_York
  • London - Europe/London
  • Paris - Europe/Paris

Windows-এ এগুলো হলো:

  • New York - Eastern Standard Time
  • London - GMT Standard Time
  • Paris - W. Europe Standard Time

static Appointment.Schedule() ওভারলোডটি ইমপ্লিমেন্ট করুন, যা একটি লোকেশন ও সময়ের স্ট্রিং নেয় এবং অ্যাপয়েন্টমেন্টের UTC সময় রিটার্ন করে।

Schedule()-এর ইমপ্লিমেন্টেশনে এমন ব্যবস্থা থাকতে হবে যাতে কোডটি একবার বিল্ড হওয়ার পর Linux, Windows আর Mac-এ রান করা যায়। এটিই প্রথম অনুশীলনী যেখানে আপনাকে অপারেটিং সিস্টেম নিয়ে ভাবতে হবে। উপরে বর্ণিত টাইম জোন আইডির পার্থক্য সামলাতে আলাদা আলাদা কোড পাথ রাখা প্রয়োজন হবে।

ইনপুট দেওয়া ডেট-টাইম স্ট্রিংগুলো বৈধ বলে ধরে নেওয়া হয়েছে।

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

3. অ্যাপয়েন্টমেন্টের আগে নির্দিষ্ট বিরতিতে ক্লায়েন্টদের সতর্কবার্তা পাঠানো

static Appointment.GetAlertTime() ইমপ্লিমেন্ট করুন, যা অ্যাপয়েন্টমেন্টের ১ দিন (early), ১ ঘণ্টা ৪৫ মিনিট (standard) আর ৩০ মিনিট (late) আগে সতর্কবার্তা দেয়।

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

4. ডেলাইট সেভিংস সম্প্রতি বদলে গেলে ক্লায়েন্টদের মনে করিয়ে দিয়ে বার্তা পাঠানো

static Appointment.HasDaylightSavingChanged() ইমপ্লিমেন্ট করুন, যা গত ৭ দিনে ডেলাইট সেভিংস চালু বা বন্ধ হয়ে গেলে true রিটার্ন করে।

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

5. অ্যাপয়েন্টমেন্ট লিখতে স্থানীয় ডেট-টাইম ফরম্যাট ব্যবহার করা

স্থানীয় কর্মীদের কাছে পরিচিত ফরম্যাটে যাতে অ্যাপয়েন্টমেন্ট নেওয়া যায়, সেজন্য আপনাকে একটি পরীক্ষামূলক রুটিন বানানোর দায়িত্ব দেওয়া হয়েছে, যাতে সেলুনের অবস্থানের ডিফল্ট ফরম্যাটে তারিখ ও সময় লেখা যায়।

Appointment.NormalizeDateTime() মেথডটি ইমপ্লিমেন্ট করুন, যা লোকেশনের সঙ্গে মানানসই ফরম্যাটে একটি সঠিকভাবে গঠিত ডেট-টাইম স্ট্রিং নেয় এবং সেটিকে একটি DateTime অবজেক্টে রূপান্তর করে। এখানে ডেট-টাইমকে UTC-তে রূপান্তর করার কোনো চেষ্টা করা হয় না।

যদি ভুল ফরম্যাট লেখা হয়, তাহলে 1/1/1 মানের একটি DateTime রিটার্ন করা উচিত।

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টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।