.NET-এ সময়-এর ধারণাটি নিয়ে কাজ করা হয় DateTime স্ট্রাক্ট দিয়ে। স্থানীয় সময় আর UTC-এর মধ্যে রূপান্তর করার রুটিন রয়েছে। TimeSpan-এর সাহায্যে গাণিতিক হিসাব করা যায়।
TimeZoneInfo ক্লাসটি নানা টাইমজোনের মধ্যকার পার্থক্য সামলানোর রুটিন দেয়। TimeZoneInfo ক্লাসে এমন মেথডও আছে যা ডেলাইট সেভিং টাইম নিয়ে কাজ করা সহজ করে তোলে।
CultureInfo ক্লাসটি লোকেল-নির্ভর তারিখ ও সময়ের ফরম্যাট সমর্থন করে।
ক্রস-প্ল্যাটফর্ম কোডিং সমর্থন করার জন্য RuntimeInformation ক্লাসটি দিয়ে আপনি বুঝতে পারবেন আপনার কোড কোন অপারেটিং সিস্টেমে চলছে, Linux, Windows বা OSX.
এই অনুশীলনীতে আপনি আবার সেলুনের জগতে ফিরে এসেছেন (যার পরিচয় প্রথম পাওয়া গিয়েছিল datetimes অনুশীলনীতে)। আপনার আরও কিছু প্রজেক্টের মতোই, আপনার আরেকজন ক্লায়েন্টও দারুণ সফল হয়েছে এবং নিউ ইয়র্কের কেন্দ্র ছাড়াও লন্ডন ও প্যারিসে শাখা খুলেছে।
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}
নিজেদের বুকিং নেওয়ার দায়িত্ব সেলুনগুলোর নিজেরই। ইনপুট দেওয়া সময় সেলুনটি যে স্থানে আছে, সেই স্থানের স্থানীয় সময় হিসেবে ধরা হয়। উদাহরণস্বরূপ, কেউ যদি নিউ ইয়র্কের সেলুনের জন্য অ্যাপয়েন্টমেন্টের সময় 13:45 লিখে দেন, তাহলে তিনি আশা করবেন ক্লায়েন্ট ঠিক লাঞ্চের পরে এসে পৌঁছাবেন। একইভাবে, কেউ যদি লন্ডনের সেলুনের জন্য 13:45 সময় লিখতেন, তিনিও আশা করতেন ক্লায়েন্ট লাঞ্চের ঠিক পরেই পৌঁছাবে।
নিউ ইয়র্ক, লন্ডন আর প্যারিসের টাইম জোন আইডি জানা থাকলে আপনার কাজে লাগবে।
Mac (OSX) ও Linux-এ এগুলো হলো:
Windows-এ এগুলো হলো:
static Appointment.Schedule() ওভারলোডটি ইমপ্লিমেন্ট করুন, যা একটি লোকেশন ও সময়ের স্ট্রিং নেয় এবং অ্যাপয়েন্টমেন্টের UTC সময় রিটার্ন করে।
Schedule()-এর ইমপ্লিমেন্টেশনে এমন ব্যবস্থা থাকতে হবে যাতে কোডটি একবার বিল্ড হওয়ার পর Linux, Windows আর Mac-এ রান করা যায়। এটিই প্রথম অনুশীলনী যেখানে আপনাকে অপারেটিং সিস্টেম নিয়ে ভাবতে হবে। উপরে বর্ণিত টাইম জোন আইডির পার্থক্য সামলাতে আলাদা আলাদা কোড পাথ রাখা প্রয়োজন হবে।
ইনপুট দেওয়া ডেট-টাইম স্ট্রিংগুলো বৈধ বলে ধরে নেওয়া হয়েছে।
Appointment.Schedule("7/25/2030 13:45:00", Location.Paris);
// => {2030, 7, 25, 11, 45, 0}
static Appointment.GetAlertTime() ইমপ্লিমেন্ট করুন, যা অ্যাপয়েন্টমেন্টের ১ দিন (early), ১ ঘণ্টা ৪৫ মিনিট (standard) আর ৩০ মিনিট (late) আগে সতর্কবার্তা দেয়।
Appointment.GetAlertTime(new DateTime(2030, 7, 25, 14, 45, 0), AlertLevel.Early);
// => {2030, 7, 24, 14, 45, 0}
static Appointment.HasDaylightSavingChanged() ইমপ্লিমেন্ট করুন, যা গত ৭ দিনে ডেলাইট সেভিংস চালু বা বন্ধ হয়ে গেলে true রিটার্ন করে।
Appointment.HasDaylightSavingChanged(new DateTime(2020, 3, 30, 14, 45, 0), Location.London);
// => true
স্থানীয় কর্মীদের কাছে পরিচিত ফরম্যাটে যাতে অ্যাপয়েন্টমেন্ট নেওয়া যায়, সেজন্য আপনাকে একটি পরীক্ষামূলক রুটিন বানানোর দায়িত্ব দেওয়া হয়েছে, যাতে সেলুনের অবস্থানের ডিফল্ট ফরম্যাটে তারিখ ও সময় লেখা যায়।
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}
Exercism-এ সাইন আপ করুন, C# ট্র্যাকের 62টি কনসেপ্ট178টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।