সময় মাপার পদ্ধতিটা আসলে বেশ এলোমেলো। এক মিনিটে ৬০ সেকেন্ড, আর এক ঘণ্টায় ৬০ মিনিট। এটা এসেছে প্রাচীন ব্যাবিলন থেকে, যেখানে তাঁরা তাঁদের সংখ্যা পদ্ধতির ভিত্তি হিসেবে ৬০ ব্যবহার করতেন। এক দিনে ২৪ ঘণ্টা, এক সপ্তাহে ৭ দিন, আর এক মাসে কত দিন? আসলে মাসের দিনসংখ্যা নির্ভর করে আপনি কোন মাসে আছেন তার উপরই নয়, বরং আপনার দেশে কোন ধরনের ক্যালেন্ডার ব্যবহৃত হয় তার উপরও।
কিন্তু তার বদলে যদি আমরা শুধু সেকেন্ড দিয়েই সময়ের ব্যবধান প্রকাশ করি? তাহলে বড় সংখ্যার সেকেন্ডকে আরও সহজে বোঝা যায় এমন পরিমাণে লিখতে আমরা মেট্রিক সিস্টেমের প্রিফিক্স ব্যবহার করতে পারি।
যদি আমরা কখনো মঙ্গল গ্রহে বা অন্য কোনো গ্রহে উপনিবেশ স্থাপন করি, তাহলে সময় মাপা আরও জটিল হয়ে উঠবে। যদি কেউ "বছর" বলে, তাহলে সে কি বোঝায় পৃথিবীর বছর, নাকি মঙ্গলের বছর?
এই অনুশীলনীর ধারণা এসেছে লেখক ভার্নর ভিঞ্জের সায়েন্স ফিকশন উপন্যাস "A Deepness in the Sky" থেকে। এতে লেখক সময় পরিমাপের ভিত্তি হিসেবে মেট্রিক সিস্টেম ব্যবহার করেছেন।
আপনার কাজ হলো একটি নির্দিষ্ট তারিখের এক গিগাসেকেন্ড পরে তারিখ ও সময় বের করা।
এক গিগাসেকেন্ড হলো এক হাজার মিলিয়ন সেকেন্ড। অর্থাৎ এক লিখে তার পরে নয়টি শূন্য বসালে যা হয়।
আপনি যদি ২৪ জানুয়ারি, ২০১৫, রাত 22:00 (রাত 10:00:00)-তে জন্মগ্রহণ করে থাকেন, তাহলে ২ অক্টোবর, ২০৪৬, রাত 23:46:40 (রাত 11:46:40)-এ আপনার বয়স এক গিগাসেকেন্ড হতো।
bash-এ ডেটটাইম স্ট্রিং পার্স করার কোনো বিল্ট-ইন উপায় নেই।
এই অনুশীলনীতে আপনাকে একটি এক্সটার্নাল ইউটিলিটি ডাকতে হবে।
date কমান্ডের -d অপশন নানা ধরনের ফরম্যাট পার্স করতে পারে।date কমান্ড এবং এর -f অপশন।Time::Piece মডিউল দিয়ে টাইমস্ট্যাম্প পার্স করা যায়।bash কোনো এক্সটার্নাল টুল ছাড়াই তারিখ ফরম্যাট করতে পারে।
একটি ইন্টিজার টাইম ভ্যালু (এপক থেকে সেকেন্ড) দেওয়া থাকলে, printf-এর %()T ফরম্যাটার "strftime"-ধাঁচের ফরম্যাটিং প্রয়োগ করতে পারে।
epoch=1234567890
printf '%(%Y-%m-%d %H:%M:%S)T\n' "$epoch"
# ==> 2009-02-13 18:31:30
# bash uses the `TZ` environment variable for the timezone.
TZ=Asia/Kolkata printf '%(%Y-%m-%d %H:%M:%S)T\n' "$epoch"
# ==> 2009-02-14 05:01:30
Exercism-এ সাইন আপ করুন, Bash ট্র্যাকের 97টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।