हम समय को जिस तरह मापते हैं, वह थोड़ा उलझा हुआ है। एक मिनट में 60 सेकंड होते हैं, और एक घंटे में 60 मिनट। यह प्राचीन बैबिलोन से आया है, जहाँ लोग अपनी संख्या प्रणाली का आधार 60 रखते थे। एक दिन में 24 घंटे होते हैं, एक सप्ताह में 7 दिन, और एक महीने में कितने दिन होते हैं? और महीने के दिनों की बात करें, तो वे इस पर निर्भर करते हैं कि कौन-सा महीना है, और यह भी कि आपके देश में किस तरह का कैलेंडर इस्तेमाल होता है।
क्या हो अगर हम समय के अंतराल बताने के लिए सिर्फ सेकंड इस्तेमाल करें? तब हम बड़ी संख्या में सेकंड को आसानी से समझ आने वाली मात्राओं में लिखने के लिए मीट्रिक प्रणाली के उपसर्ग लगा सकते हैं।
अगर हम कभी मंगल या किसी और ग्रह पर बस जाएँ, तो समय मापना और भी उलझा हुआ हो जाएगा। कोई "साल" कहे, तो उसका मतलब धरती का साल होगा या मंगल का?
इस अभ्यास का विचार लेखक Vernor Vinge के विज्ञान कथा उपन्यास "A Deepness in the Sky" से आया है। इसमें लेखक समय मापने के लिए मीट्रिक प्रणाली को आधार बनाते हैं।
आपका काम है किसी दी गई तारीख से एक गीगासेकंड बाद की तारीख और समय पता करना।
एक गीगासेकंड एक अरब सेकंड होता है। यानी एक के बाद नौ शून्य।
अगर आपका जन्म 24 जनवरी, 2015 को 22:00 बजे (रात 10:00:00) हुआ हो, तो 2 अक्टूबर, 2046 को 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