कोई अपलोड नहीं, 100% स्थानीय, कोई खाता नहीं

लेख

Unix टाइमस्टैम्प और cron एक्सप्रेशन समझाए गए

Unix टाइमस्टैम्प बस एक पूर्णांक है। cron एक्सप्रेशन बस पाँच फील्ड हैं। दोनों बैकएंड काम में लगातार आते हैं, और दोनों पूर्वानुमानित तरीकों से लोगों को उलझाते हैं: एक समय क्षेत्र के कारण, दूसरा इकाई के कारण।

Unix टाइमस्टैम्प क्या है

Unix टाइमस्टैम्प 1970-01-01 00:00:00 UTC के बाद से बीते सेकंड की संख्या गिनता है, जिसे Unix epoch कहते हैं। इस परिभाषा के दो महत्वपूर्ण परिणाम हैं। पहला, गिनती UTC में है: संख्या में कोई समय क्षेत्र नहीं है। 1718400000 का अर्थ है एक ही क्षण पृथ्वी पर कहीं भी। दूसरा, epoch सेकंड में परिभाषित है, किसी अन्य इकाई में नहीं। टाइमस्टैम्प डिज़ाइन से timezone-free हैं, इसीलिए वे लॉगिंग, डेटाबेस और इंटर-सिस्टम संचार के लिए उपयोगी हैं।

Unix epoch को 1970-01-01 00:00:00 UTC पर बाईं ओर, बीच में वर्तमान टाइमस्टैम्प और दाईं ओर 2038 overflow सीमा दिखाने वाली टाइमलाइन, signed 32-bit integer अधिकतम के साथ चिह्नित।

सेकंड, मिलीसेकंड और year-2038 की समस्या

कई आधुनिक रनटाइम और API सेकंड के बजाय मिलीसेकंड का उपयोग करते हैं। JavaScript का Date.now() मिलीसेकंड लौटाता है, इसलिए 1718400000000 सेकंड-परिशुद्धता मूल्य 1718400000 जैसा ही क्षण है। अपरिचित टाइमस्टैम्प प्राप्त होने पर, परिमाण इकाई बताता है: 10-अंक की संख्या लगभग हमेशा सेकंड है; 13-अंक की संख्या लगभग हमेशा मिलीसेकंड है। year-2038 की समस्या एक अलग चुनाव से उत्पन्न होती है: signed 32-bit integer में सेकंड-परिशुद्धता टाइमस्टैम्प संग्रहीत करना। signed 32-bit integer का अधिकतम मूल्य 2147483647 है, जो 2038-01-19 03:14:07 UTC के अनुरूप है। उस सेकंड के बाद, काउंटर overflow होकर बड़े ऋणात्मक संख्या पर आ जाता है। सुधार 64-bit storage का उपयोग करना है।

epoch को मानव तारीख में बदलना: समय क्षेत्र चरण

epoch मूल्य को पठनीय तारीख में बदलने के दो चरण हैं: पूर्णांक से UTC तारीख घटक प्राप्त करें, फिर स्थानीय समय पाने के लिए UTC ऑफसेट लागू करें। टाइमस्टैम्प स्वयं UTC है। 1718325000 किस तारीख को दर्शाता है का सही उत्तर UTC में 2024-06-14 को 00:30 है। न्यूयॉर्क (UTC-4 गर्मियों में) में वही सेकंड पिछली शाम 2024-06-13 को 20:30 बजे पड़ता है: सिर्फ़ घंटा नहीं, तारीख भी बदल जाती है। Sunasty का timestamp-converter टूल यह स्पष्ट रूप से संभालता है: आप epoch मूल्य दर्ज करते हैं और यह UTC तारीख व समय को आपके डिवाइस की अपनी स्थानीय तारीख व समय के साथ दिखाता है, ताकि इस तरह की date-boundary crossing एक नज़र में दिख जाए। रूपांतरण पूरी तरह ब्राउज़र में चलता है।

एक ही epoch मान के लिए दो कैलेंडर ग्रिड आमने-सामने: UTC ग्रिड एक कैलेंडर दिन को हाइलाइट करता है और न्यूयॉर्क (UTC-4) ग्रिड पिछले दिन को हाइलाइट करता है, जिससे पता चलता है कि समय अंतर के कारण स्थानीय तारीख कैसे एक दिन पीछे खिसक जाती है।

Cron सिंटैक्स: पाँच फील्ड, रेंज, चरण और सूचियाँ

एक cron एक्सप्रेशन Unix-like सिस्टम पर नियमित जॉब शेड्यूल करता है। मानक सिंटैक्स में पाँच space-separated फील्ड हैं: मिनट (0-59), घंटा (0-23), महीने का दिन (1-31), महीना (1-12), सप्ताह का दिन (0-7, जहाँ 0 और 7 दोनों रविवार दर्शाते हैं)। किसी फील्ड में star (*) का अर्थ है "हर मान्य मूल्य"। एक्सप्रेशन 30 8 * * 1-5 सोमवार से शुक्रवार 08:30 पर चलता है। रेंज hyphen का उपयोग करती हैं: 1-5 मान 1, 2, 3, 4, 5 कवर करती है। सूचियाँ comma का उपयोग करती हैं: 1,15 का अर्थ 1st और 15th। चरण slash का उपयोग करते हैं: मिनट फील्ड में */15 का अर्थ हर 15 मिनट (0, 15, 30, 45)। cron में समय क्षेत्र फील्ड नहीं है। daemon उस मशीन की घड़ी पढ़ता है जिस पर यह चलता है।

timestamp-converter को स्थानीय रूप से उपयोग करना

Sunasty का timestamp-converter दोनों दिशाओं में रूपांतरित करता है: epoch से मानव तारीख और मानव तारीख से वापस epoch। आप सेकंड-परिशुद्धता या मिलीसेकंड-परिशुद्धता मूल्य दर्ज कर सकते हैं; टूल परिमाण से इकाई का पता लगाता है। यह नतीजा UTC में और आपके डिवाइस के अपने स्थानीय समय क्षेत्र में साथ-साथ दिखाता है, साथ ही कॉपी करने के लिए तैयार raw सेकंड और मिलीसेकंड मूल्य भी। एक Now बटन एक क्लिक में मौजूदा टाइमस्टैम्प भर देता है, जो टर्मिनल खोले बिना वर्तमान Unix समय जानने का तेज़ तरीका है। यहां कोई अलग टाइम ज़ोन पिकर नहीं है: local कॉलम हमेशा वही टाइम ज़ोन दिखाता है जो फ़िलहाल आपके ब्राउज़र में सेट है। यह सब ब्राउज़र में चलता है।

इस लेख में उल्लेखित टूल्स

अक्सर पूछे जाने वाले सवाल

JavaScript सेकंड के बजाय मिलीसेकंड क्यों उपयोग करता है?

JavaScript का Date ऑब्जेक्ट शुरुआत से sub-second परिशुद्धता के साथ काम करने के लिए डिज़ाइन किया गया था, और मिलीसेकंड दशमलव बिंदु की आवश्यकता के बिना सेकंड से एक हजार गुना अधिक रिज़ॉल्यूशन देते हैं। ट्रेडऑफ़ यह है कि मूल्य बड़े हैं, इसीलिए Date.now() 13-अंक की संख्या देता है जबकि अधिकांश server-side टाइमस्टैम्प 10 अंक के हैं।

क्या cron चलाने वाले हर सर्वर को UTC पर होना ज़रूरी है?

नहीं, लेकिन सर्वर UTC पर चलाना एक सामान्य अभ्यास है क्योंकि यह अस्पष्टता हटाता है। जब सर्वर UTC पर हो, तो 0 2 * * * जैसा cron एक्सप्रेशन 02:00 UTC का अर्थ है और वह समय साल भर स्थिर है। DST मनाने वाले क्षेत्र के सर्वर पर, वही जॉब गर्मी और सर्दी में अलग UTC क्षण पर चलती है।

2038 के बाद के टाइमस्टैम्प के लिए सुरक्षित storage प्रकार क्या है?

signed 64-bit integer वर्ष 292277026596 तक सेकंड-परिशुद्धता टाइमस्टैम्प रखता है, जो किसी भी व्यावहारिक चिंता से परे है। अधिकांश वर्तमान डेटाबेस डिफ़ॉल्ट रूप से टाइमस्टैम्प 64-bit मूल्यों के रूप में संग्रहीत करते हैं। यदि आप legacy schema या binary file format के साथ काम कर रहे हैं जो 32-bit फील्ड का उपयोग करता है, तो 2038 सीमा से पहले 64-bit storage में माइग्रेट करना सही सुधार है।