মানুষের পড়ার উপযোগী তারিখ ও সময় দেখানোর জন্য Time মডিউলটি ব্যবহার করা হয়।
যদিও Time দিয়ে সময় নাড়াচাড়া করা প্রযুক্তিগতভাবে সম্ভব, তবু এই কাজের জন্য Elm কমিউনিটির এমন কিছু প্যাকেজ আছে যেগুলো অনেক বেশি উপযুক্ত, যেমন justinmimbs/date বা CoderDennis/elm-time-format।
সময়কে প্রকাশ করা হয় Posix নামের অপেক টাইপ দিয়ে, যা Unix epoch time ধারণ করে, অর্থাৎ ১ জানুয়ারি ১৯৭০, UTC অনুসারে মধ্যরাত থেকে যত মিলিসেকেন্ড পেরিয়ে গেছে তার সংখ্যা।
একটি Posix হলো দ্ব্যর্থতাহীন একটি মান, যা টাইম জোন ভেদে বদলায় না, তাই সময় ধরে রাখার জন্য এটি ভালো একটি পছন্দ।
একটি Elm অ্যাপ্লিকেশনে Posix সময় সাধারণত বাইরের উৎস, যেমন ব্রাউজার, থেকে সরবরাহ করা হয়।
নিচের ফাংশনগুলো দিয়ে একটি Posix মানকে মিলিসেকেন্ডের সংখ্যায় রূপান্তর করা যায়, আবার উল্টোটাও করা যায়:
posixToMillis : Posix -> Int
millisToPosix : Int -> Posix
আমাদের দৈনন্দিন জীবনে আমরা সাধারণত Posix পড়ি না, বরং স্থানীয় সময়ই পছন্দ করি, যা পৃথিবীতে আমাদের অবস্থান এবং স্থানীয় ডেলাইট সেভিং সংক্রান্ত নিয়মের উপর নির্ভর করে।
Elm-এ এই তথ্য এনকোড করা থাকে Zone নামের অপেক টাইপে, যা সাধারণত ব্রাউজার সরবরাহ করে।
এমন একটি বিশেষ Zone আছে যা সবসময় ব্যবহার করা যায়:
utc : Zone
একটি Posix আর একটি Zone থাকলে, যেকোনো স্তরের বিস্তারিতসহ স্থানীয় সময় দেখানোর জন্য আমাদের কাছে যথেষ্ট তথ্য থাকে।
সে কাজে ব্যবহার করা যায় এমন ফাংশনগুলোর তালিকা এখানে:
toYear : Zone -> Posix -> Int
toMonth : Zone -> Posix -> Month
toDay : Zone -> Posix -> Int
toWeekday : Zone -> Posix -> Weekday
toHour : Zone -> Posix -> Int
toMinute : Zone -> Posix -> Int
toSecond : Zone -> Posix -> Int
toMillis : Zone -> Posix -> Int
আপনি নিশ্চয়ই Time-এর আরও দুটি কাস্টম টাইপ লক্ষ্য করেছেন:
type Month = Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec
type Weekday = Mon | Tue | Wed | Thu | Fri | Sat | Sun
এই কাস্টম টাইপগুলোকে মানুষের পড়ার উপযোগী মানে রূপান্তর করার কাজটি ব্যবহারকারীর উপরেই ছাড়া হয়েছে।
আপনার জাপানি বন্ধু কুরোকো একজন স্ট্রিমার, যাঁর আন্তর্জাতিক জনপ্রিয়তা রয়েছে। কুরোকোর স্ট্রিমিং সময়সূচি বেশ জটিল, প্রতিদিন প্রতিটি স্ট্রিম যেন ভিন্ন ভিন্ন সময়ে শুরু হয়।
তিনি আপনার সাহায্য চেয়েছেন একটি ছোট অ্যাপ্লিকেশন তৈরি করতে, যা তাঁর দর্শকদের স্থানীয় টাইম জোনে তাঁর সময়সূচি দেখাবে: কুরোকোর ক্লক। তাঁর আরও একটি শর্ত আছে: অ্যাপটি যেন দুইটি ভিন্ন ভাষায় সময় দেখাতে পারে: জাপানি এবং US English।
একটি ফাংশন showLocalDate : Locale -> Int -> Month -> Int -> String ডিফাইন করুন, যা একটি (বৈধ) স্থানীয় তারিখ দেখাবে।
US লোকেলে ফরম্যাট হবে Month/Day/Year, শুরুর শূন্য ছাড়া।
JP লোকেলে ফরম্যাট হবে Year年Month月Day日, এক্ষেত্রেও শুরুর শূন্য ছাড়া।
showLocalDate US 2025 May 1
-- "5/1/2025"
showLocalDate JP 2025 May 1
-- "2025年5月1日"
একটি ফাংশন showLocalTime : Locale -> Int -> Int -> String ডিফাইন করুন, যা একটি (বৈধ) স্থানীয় সময় দেখাবে।
US লোকেলে ঘণ্টা দেখানো হবে ১২-ঘণ্টার ফরম্যাটে, সঙ্গে "PM" বা "AM", আর মিনিট দেখানো হবে শুরুর শূন্যসহ।
JP লোকেলে ঘণ্টা দেখানো হবে "時"-এর আগে ২৪-ঘণ্টার ফরম্যাটে এবং মিনিট দেখানো হবে "分"-এর আগে শুরুর শূন্য ছাড়া।
showLocalTime US 13 8
-- "1:08 PM"
showLocalTime JP 13 8
-- "13時8分"
একটি ফাংশন showDateTime : Locale -> Zone -> Posix -> String ডিফাইন করুন, যা একটি নির্দিষ্ট লোকেলে টাইম জোনের সাপেক্ষে তারিখ ও সময় দেখাবে।
চূড়ান্ত ফলাফল দেখাতে showLocalDate এবং showLocalTime ব্যবহার করুন।
showDateTime US Time.utc (Time.millisToPosix 0)
-- "1/1/1970 12:00 AM"
showDateTime JP Time.utc (Time.millisToPosix 0)
-- "1970年1月1日0時0分"
Exercism-এ সাইন আপ করুন, Elm ট্র্যাকের 28টি কনসেপ্ট110টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।