यूनिक्स समय

From Vigyanwiki
वर्तमान यूनिक्स समय
1772396288 (update)
2026-03-01T20:18:08+00:00
यूनिक्स का समय बीत गया 1000000000 सेकेंड पर 2001-09-09T01:46:40Z.[1] यह कोपेनहेगन, डेनमार्क में डेनिश यूनिक्स उपयोगकर्ता समूह द्वारा स्थानीय समयानुसार 03:46:40 पर आयोजित एक पार्टी में मनाया गया।


यूनिक्स समय एक दिनांक और समय प्रतिनिधित्व है[2] जिसका व्यापक रूप से कंप्यूटिंग में उपयोग किया जाता है।[3] यह समय को 1 जनवरी 1970, यूनिक्स युग, 00:00:00 यूटीसी के बाद से बीत चुके सेकंडों की संख्या के आधार पर मापता है, लीप सेकंड के कारण किए गए समायोजन के बिना। आधुनिक कंप्यूटिंग में, मानों को कभी-कभी उच्च ग्रैन्युलैरिटी के साथ संग्रहीत किया जाता है, जैसे माइक्रोसेकंड या नैनोसेकंड।

यूनिक्स समय की उत्पत्ति यूनिक्स ऑपरेटिंग सिस्टम के सिस्टम समय के रूप में हुई थी। यह अन्य कंप्यूटर ऑपरेटिंग सिस्टम, फाइल सिस्टम, प्रोग्रामिंग भाषा और डेटाबेस में व्यापक रूप से उपयोग किया जाने लगा है।

परिभाषा

यूनिक्स समय को वर्तमान में सेकंड की संख्या के रूप में परिभाषित किया गया है जो 00:00:00 के बाद से पारित हो गया है यूटीसी गुरुवार, 1 जनवरी 1970 को, जिसे यूनिक्स एपोच (कंप्यूटिंग) कहा जाता है। यूनिक्स समय सामान्यतः एक हस्ताक्षरित पूर्णांक के रूप में एन्कोड किया जाता है।[3]

यूनिक्स समय 0 1 जनवरी 1970 की ठीक आधी रात यूटीसी है, इसके बाद प्रत्येक गैर-लीप सेकंड के लिए यूनिक्स समय में 1 की वृद्धि होती है। उदाहरण के लिए, 1 जनवरी 1971 को 00:00:00 यूटीसी को यूनिक्स समय में 31536000 के रूप में दर्शाया गया है। नकारात्मक मान यूनिक्स युग से पहले के समय को दर्शाते हैं, युग से पहले प्रत्येक गैर-लीप सेकंड के लिए मान 1 से घट जाता है। उदाहरण के लिए 1 जनवरी 1969 को 00:00:00 यूटीसी को यूनिक्स समय में −31536000 के रूप में दर्शाया गया है। यूनिक्स में हर दिन ठीक 86400 सेकंड का होता है।

यूनिक्स समय को कभी-कभी एपोच टाइम भी कहा जाता है। यह भ्रामक हो सकता है क्योंकि यूनिक्स समय एक युग पर आधारित एकमात्र समय प्रणाली नहीं है और यूनिक्स युग अन्य समय प्रणालियों द्वारा उपयोग किया जाने वाला एकमात्र युग नहीं है।[4][5][6]

लीप सेकंड

लीप सेकंड के प्रबंधन में यूनिक्स समय समन्वित यूनिवर्सल टाइम (यूटीसी ) और अंतर्राष्ट्रीय परमाणु समय (टीएआई) दोनों से अलग है। यूटीसी में लीप सेकेंड सम्मिलित हैं जो स्पष्ट समय के बीच विसंगति के लिए समायोजित होते हैं, जैसा कि परमाणु घड़ियों द्वारा मापा जाता है, और सूर्य के संबंध में पृथ्वी की स्थिति से संबंधित सौर समय अंतर्राष्ट्रीय परमाणु समय (टीएआई), जिसमें हर दिन ठीक है 86400 सेकंड लंबा, सौर समय की उपेक्षा करता है और धीरे-धीरे लगभग एक सेकंड प्रति वर्ष की दर से पृथ्वी के घूर्णन के साथ तादात्म्य खो देता है। यूनिक्स समय में, हर दिन पूर्ण रूप से सम्मिलित होता है 86400 सेकंड। प्रत्येक लीप सेकंड एक सेकंड के टाइमस्टैम्प का उपयोग करता है जो तुरंत पहले या बाद में होता है।[3]

एक सामान्य यूटीसी दिवस पर जिसकी अवधि होती है 86400 सेकेंड, यूनिक्स समय संख्या मध्यरात्रि में निरंतर कार्य विधि से बदलती है। उदाहरण के लिए, उपरोक्त उदाहरणों में प्रयुक्त दिन के अंत में समय निरूपण निम्नानुसार आगे बढ़ता है:

17 सितंबर 2004 की आधी रात तक यूनिक्स समय (कोई लीप सेकंड नहीं)
टीएआई (17 सितंबर 2004) यूटीसी (16 से 17 सितम्बर 2004) यूनिक्स समय
2004-09-17T00:00:30.75 2004-09-16T23:59:58.75 1095379198.75
2004-09-17T00:00:31.00 2004-09-16T23:59:59.00 1095379199.00
2004-09-17T00:00:31.25 2004-09-16T23:59:59.25 1095379199.25
2004-09-17T00:00:31.50 2004-09-16T23:59:59.50 1095379199.50
2004-09-17T00:00:31.75 2004-09-16T23:59:59.75 1095379199.75
2004-09-17T00:00:32.00 2004-09-17T00:00:00.00 1095379200.00
2004-09-17T00:00:32.25 2004-09-17T00:00:00.25 1095379200.25
2004-09-17T00:00:32.50 2004-09-17T00:00:00.50 1095379200.50
2004-09-17T00:00:32.75 2004-09-17T00:00:00.75 1095379200.75
2004-09-17T00:00:33.00 2004-09-17T00:00:01.00 1095379201.00
2004-09-17T00:00:33.25 2004-09-17T00:00:01.25 1095379201.25

जब एक लीप सेकेंड होता है, तो यूटीसी दिन पूर्ण रूप से नहीं होता है 86400 सेकंड लंबा और यूनिक्स समय संख्या (जो सदैव स्पष्ट रूप से बढ़ती है 86400 प्रत्येक दिन) एक विच्छिन्नता (गणित) का अनुभव करता है। लीप सेकंड सकारात्मक या नकारात्मक हो सकता है। कोई नकारात्मक लीप सेकंड कभी भी घोषित नहीं किया गया है, किंतु यदि कोई हो, तो एक दिन के अंत में एक नकारात्मक लीप सेकंड के साथ यूनिक्स समय संख्या अगले दिन की प्रारंभ में 1 से ऊपर हो जाएगी। एक दिन के अंत में एक सकारात्मक लीप सेकंड के समय, जो औसतन हर डेढ़ साल में होता है, यूनिक्स समय संख्या लीप सेकंड के समय अगले दिन में निरन्तर बढ़ जाती है और फिर लीप सेकंड के अंत में 1 से पीछे हट जाती है (अगले दिन की प्रारंभ में लौटते हुए)। उदाहरण के लिए, 1998 के अंत में पोसिक्स .1 सिस्टम के सख्ती से अनुरूप होने पर यही हुआ:

1 जनवरी 1999 की आधी रात से यूनिक्स समय (सकारात्मक लीप सेकंड)
टीएआई(1 जनवरी 1999) यूटीसी (31 दिसंबर 1998 से 1 जनवरी 1999) यूनिक्स समय
1999-01-01T00:00:29.75 1998-12-31T23:59:58.75 915148798.75
1999-01-01T00:00:30.00 1998-12-31T23:59:59.00 915148799.00
1999-01-01T00:00:30.25 1998-12-31T23:59:59.25 915148799.25
1999-01-01T00:00:30.50 1998-12-31T23:59:59.50 915148799.50
1999-01-01T00:00:30.75 1998-12-31T23:59:59.75 915148799.75
1999-01-01T00:00:31.00 1998-12-31T23:59:60.00 915148800.00
1999-01-01T00:00:31.25 1998-12-31T23:59:60.25 915148800.25
1999-01-01T00:00:31.50 1998-12-31T23:59:60.50 915148800.50
1999-01-01T00:00:31.75 1998-12-31T23:59:60.75 915148800.75
1999-01-01T00:00:32.00 1999-01-01T00:00:00.00 915148800.00
1999-01-01T00:00:32.25 1999-01-01T00:00:00.25 915148800.25
1999-01-01T00:00:32.50 1999-01-01T00:00:00.50 915148800.50
1999-01-01T00:00:32.75 1999-01-01T00:00:00.75 915148800.75
1999-01-01T00:00:33.00 1999-01-01T00:00:01.00 915148801.00
1999-01-01T00:00:33.25 1999-01-01T00:00:01.25 915148801.25

एक सकारात्मक लीप सेकंड के तुरंत बाद दूसरे में यूनिक्स समय संख्याएं दोहराई जाती हैं। यूनिक्स समय संख्या 1483142400 इस प्रकार अस्पष्ट है: यह या तो लीप सेकेंड (2016-12-31 23:59:60) की प्रारंभ या इसके अंत में एक सेकंड बाद (2017-01-01 00:00:00) को संदर्भित कर सकता है। सैद्धांतिक स्थिति में जब एक नकारात्मक लीप सेकेंड होता है, तो कोई अस्पष्टता नहीं होती है, किंतु इसके अतिरिक्त यूनिक्स समय संख्याओं की एक श्रृंखला होती है जो यूटीसी समय में किसी भी बिंदु को पूर्ण रूप से भी संदर्भित नहीं करती है।

एक यूनिक्स घड़ी को अधिकांशतः नेटवर्क टाइम प्रोटोकॉल (एनटीपी) से जुड़े एक अलग प्रकार के सकारात्मक लीप सेकेंड हैंडलिंग के साथ प्रयुक्त किया जाता है। यह एक ऐसी प्रणाली उत्पन्न करता है जो पोसिक्स मानक के अनुरूप नहीं है। विवरण के लिए एनटीपी से संबंधित अनुभाग देखें।

यूटीसी लीप सेकेंड को सम्मिलित नहीं करने वाली अवधियों के साथ काम करते समय दो यूनिक्स समय संख्याओं के बीच का अंतर समय के संबंधित बिंदुओं के बीच की अवधि के सेकंड में अवधि के समान होता है। यह एक सामान्य कम्प्यूटेशनल तकनीक है। चूँकि, जहाँ लीप सेकंड होते हैं, ऐसी गणनाएँ गलत उत्तर देती हैं। उन अनुप्रयोगों में जहां स्पष्टता के इस स्तर की आवश्यकता होती है, यूनिक्स समय से निपटने के समय लीप सेकेंड की तालिका से परामर्श करना आवश्यक होता है, और अधिकांशतः एक अलग समय एन्कोडिंग का उपयोग करना उत्तम होता है जो इस समस्या से पीड़ित नहीं होता है।

यूनिक्स समय संख्या, सापेक्ष के भागफल और मापांक को लेकर एक यूनिक्स समय संख्या आसानी से यूटीसी समय में वापस परिवर्तित हो जाती है 86400. भागफल युग के बाद से दिनों की संख्या है, और मापांक उस दिन मध्यरात्रि यूटीसी के बाद से सेकंड की संख्या है। यदि एक यूनिक्स समय संख्या दी गई है जो एक सकारात्मक लीप सेकंड के कारण अस्पष्ट है तो यह एल्गोरिथ्म इसे आधी रात के ठीक बाद के समय के रूप में व्याख्या करता है। यह कभी भी ऐसा समय उत्पन्न नहीं करता है जो एक लीप सेकंड के समय हो। यदि एक यूनिक्स समय संख्या दी गई है जो नकारात्मक लीप सेकेंड के कारण अमान्य है, तो यह समान रूप से अमान्य यूटीसी समय उत्पन्न करती है। यदि ये स्थितियाँ महत्वपूर्ण हैं, तो उनका पता लगाने के लिए लीप सेकंड की तालिका से परामर्श करना आवश्यक है।

नॉन-सिंक्रोनस नेटवर्क टाइम प्रोटोकॉल-आधारित वैरिएंट

सामान्यतः एक डेविड एल. मिल्स-शैली की यूनिक्स घड़ी को लीप सेकेंड हैंडलिंग के साथ कार्यान्वित किया जाता है जो यूनिक्स समय संख्या के परिवर्तन के साथ तुल्यकालिक नहीं है। समय संख्या प्रारंभ में घट जाती है जहां एक छलांग लगनी चाहिए थी, और फिर यह छलांग लगाने के 1 सेकंड बाद सही समय पर पहुंच जाती है। यह कार्यान्वयन को आसान बनाता है, और मिल्स पेपर द्वारा इसका वर्णन किया गया है।[7] सकारात्मक लीप सेकंड में यही होता है:

गैर-तुल्यकालिक मिल्स-शैली यूनिक्स घड़ी 1 जनवरी 1999 की आधी रात के पार (सकारात्मक लीप सेकंड)
टीएआई ((1 जनवरी 1999)) यूटीसी (31 दिसंबर 1998 से (1 जनवरी 1999)) अवस्था यूनिक्स घड़ी
1999-01-01T00:00:29.75 1998-12-31T23:59:58.75 TIME_INS 915148798.75
1999-01-01T00:00:30.00 1998-12-31T23:59:59.00 TIME_INS 915148799.00
1999-01-01T00:00:30.25 1998-12-31T23:59:59.25 TIME_INS 915148799.25
1999-01-01T00:00:30.50 1998-12-31T23:59:59.50 TIME_INS 915148799.50
1999-01-01T00:00:30.75 1998-12-31T23:59:59.75 TIME_INS 915148799.75
1999-01-01T00:00:31.00 1998-12-31T23:59:60.00 TIME_INS 915148800.00
1999-01-01T00:00:31.25 1998-12-31T23:59:60.25 TIME_OOP 915148799.25
1999-01-01T00:00:31.50 1998-12-31T23:59:60.50 TIME_OOP 915148799.50
1999-01-01T00:00:31.75 1998-12-31T23:59:60.75 TIME_OOP 915148799.75
1999-01-01T00:00:32.00 1999-01-01T00:00:00.00 TIME_OOP 915148800.00
1999-01-01T00:00:32.25 1999-01-01T00:00:00.25 TIME_WAIT 915148800.25
1999-01-01T00:00:32.50 1999-01-01T00:00:00.50 TIME_WAIT 915148800.50
1999-01-01T00:00:32.75 1999-01-01T00:00:00.75 TIME_WAIT 915148800.75
1999-01-01T00:00:33.00 1999-01-01T00:00:01.00 TIME_WAIT 915148801.00
1999-01-01T00:00:33.25 1999-01-01T00:00:01.25 TIME_WAIT 915148801.25

लीप सेकेंड स्टेट वेरिएबल पर ध्यान देकर इसे ठीक से डिकोड किया जा सकता है, जो स्पष्ट रूप से इंगित करता है कि क्या लीप अभी तक किया गया है। अवस्था चर परिवर्तन छलांग के साथ तुल्यकालिक है।

इसी तरह की स्थिति एक नकारात्मक लीप सेकंड के साथ उत्पन्न होती है, जहां दूसरा जो छोड़ दिया जाता है, उसमें थोड़ी बहुत देर हो जाती है। बहुत संक्षेप में प्रणाली नाममात्र की असंभव समय संख्या दिखाती है, किंतु इसे TIME_DEL स्थिति द्वारा पता लगाया जा सकता है और इसे ठीक किया जा सकता है।

इस प्रकार की प्रणाली में यूनिक्स समय संख्या दोनों प्रकार के लीप सेकंड के आसपास पोसिक्स का उल्लंघन करती है। समय संख्या के साथ लीप दूसरा अवस्था चर को एकत्रित करने से स्पष्ट डिकोडिंग की अनुमति मिलती है, इसलिए यदि वांछित हो तो सही पोसिक्स समय संख्या उत्पन्न की जा सकती है, या पूर्ण यूटीसी समय को अधिक उपयुक्त प्रारूप में संग्रहीत किया जा सकता है।

यूनिक्स घड़ी की इस शैली से निपटने के लिए आवश्यक डिकोडिंग तर्क भी उसी इंटरफ़ेस का उपयोग करके एक काल्पनिक पोसिक्स - अनुरूप घड़ी को सही रूप से डिकोड करेगा। यह सम्मिलित लीप सेकंड की संपूर्णता के समय TIME_INS स्थिति को इंगित करके प्राप्त किया जाएगा, फिर सेकंड की गिनती दोहराते हुए अगले सेकंड की संपूर्णता के समय TIME_WAIT का संकेत दिया जाएगा। इसके लिए सिंक्रोनस लीप सेकेंड हैंडलिंग की आवश्यकता होती है। यूनिक्स इंटरफ़ेस के माध्यम से यूनिक्स घड़ी के रूप में यूटीसी समय को व्यक्त करने का यह संभवतः सबसे अच्छी विधि है, जब अंतर्निहित घड़ी मौलिक रूप से लीप सेकेंड से परेशान नहीं होती है।

लीप सेकंड गिनने वाला संस्करण

यूनिक्स टाइम कीपिंग का एक और, बहुत दुर्लभ, गैर-अनुरूप संस्करण में लीप सेकंड सहित सभी सेकंड के लिए मूल्य बढ़ाना सम्मिलित है;[8] कुछ लिनक्स सिस्टम इस तरह से कॉन्फ़िगर किए गए हैं।[9] इस विधि से रखे गए समय को कभी-कभी टीएआई के रूप में संदर्भित किया जाता है (चूँकि टाइम स्टैम्प को यूटीसी में परिवर्तित किया जा सकता है यदि मान उस समय से मेल खाता है जब टीएआई और यूटीसी के बीच का अंतर ज्ञात हो), जैसा कि यूटीसी के विपरीत है (चूँकि सभी यूटीसी समय मान नहीं हैं) सिस्टम में एक अनूठा संदर्भ जो लीप सेकेंड की गणना नहीं करता है)।[9]

क्योंकि टीएआई में कोई लीप सेकंड नहीं है, और प्रत्येक टीएआई दिन ठीक 86400 सेकंड लंबा है, यह एन्कोडिंग वास्तव में 1970-01-01T00:00:10 के बाद से बीत चुके सेकंड की शुद्ध रैखिक गणना है। इससे यह समय अंतराल अंकगणित को बहुत आसान बनाता है। इन प्रणालियों के समय मूल्यों में अस्पष्टता नहीं होती है जो पोसिक्स सिस्टम या एनटीपी-संचालित सिस्टम के सख्ती से अनुरूप होती है।

इन प्रणालियों में यूटीसी और छद्म-यूनिक्स-टाइम प्रतिनिधित्व के बीच सही रूप से परिवर्तित करने के लिए लीप सेकेंड की तालिका से परामर्श करना आवश्यक है। यह उस विधि से मिलता जुलता है जिसमें समय क्षेत्र तालिकाओं को नागरिक समय से और उससे परिवर्तित करने के लिए परामर्श किया जाना चाहिए; आईएएनए समय क्षेत्र डेटाबेस में लीप सेकंड की जानकारी सम्मिलित है, और उसी स्रोत से उपलब्ध नमूना कोड उस जानकारी का उपयोग टीएआई-आधारित समय टिकटों और स्थानीय समय के बीच परिवर्तित करने के लिए करता है। यूटीसी के वर्तमान स्वरूप के 1972 के प्रारंभ से पहले रूपांतरण भी निश्चित समस्याओं में चला जाता है (नीचे अनुभाग या यूटीसी आधार देखें)।

यह प्रणाली, अपनी सतही समानता के अतिरिक्त, यूनिक्स समय की नहीं है। यह उन मानों के साथ समय को एन्कोड करता है जो पोसिक्स समय मानों से कई सेकंड भिन्न होते हैं। इस प्रणाली का एक संस्करण, जिसमें युग 1970-01-01T00:00:10 TAI के अतिरिक्त 1970-01-01T00:00:00 टीएआई था को आईएसओ C के समय में शामिल करने के लिए प्रस्तावित किया गया था, किंतु केवल UTC भाग 2011 में स्वीकार किया गया था.[10] चूँकि C++20 में एक ताई_क्लॉक उपस्थित है।

संख्या का प्रतिनिधित्व

संख्याओं का प्रतिनिधित्व करने में सक्षम किसी भी रूप में एक यूनिक्स समय संख्या का प्रतिनिधित्व किया जा सकता है। कुछ अनुप्रयोगों में संख्या को केवल दशमलव अंकों की एक स्ट्रिंग के रूप में पाठ्य रूप में दर्शाया जाता है, जिससे केवल तुच्छ अतिरिक्त समस्याएं उत्पन्न होती हैं। चूँकि यूनिक्स समय के कुछ द्विआधारी प्रतिनिधित्व विशेष रूप से महत्वपूर्ण हैं।

यूनिक्स time_tडेटा प्रकार जो समय में एक बिंदु का प्रतिनिधित्व करता है, कई प्लेटफार्मों पर, एक हस्ताक्षरित पूर्णांक है, पारंपरिक रूप से 32 बिट्स का (किंतु नीचे देखें), सीधे यूनिक्स समय संख्या को एन्कोडिंग करता है जैसा कि पिछले अनुभाग में वर्णित है। एक हस्ताक्षरित 32-बिट मान 1970-01-01 युग से पहले और बाद के लगभग 68 वर्षों को कवर करता है। न्यूनतम प्रतिनिधित्व योग्य तिथि शुक्रवार 1901-12-13 है, और अधिकतम प्रतिनिधित्व योग्य तिथि मंगलवार 2038-01-19 है। 03:14:07 यूटीसी 2038-01-19 के एक सेकंड बाद यह प्रतिनिधित्व वर्ष 2038 समस्या के रूप में जाना जाता है।

कुछ नए ऑपरेटिंग सिस्टम में, time_t 64 बिट्स तक विस्तृत किया गया है। यह दोनों दिशाओं में लगभग 292 बिलियन वर्षों के प्रतिनिधित्व योग्य समय का विस्तार करता है, जो ब्रह्मांड की वर्तमान आयु से बीस गुना अधिक है।

मूल रूप से इस बात पर कुछ विवाद था कि क्या यूनिक्स time_t हस्ताक्षरित या अहस्ताक्षरित होना चाहिए। यदि अहस्ताक्षरित है, तो भविष्य में इसकी सीमा दोगुनी हो जाएगी, 32-बिट अतिप्रवाह (68 वर्ष तक) को स्थगित कर दिया जाएगा। चूँकि यह युग से पहले के समय का प्रतिनिधित्व करने में असमर्थ होगा। के लिए सहमति है time_t हस्ताक्षर करने के लिए, और यह सामान्य अभ्यास है। क्यूएनएक्स ऑपरेटिंग सिस्टम के संस्करण 6 के लिए सॉफ़्टवेयर डेवलपमेंट प्लेटफ़ॉर्म में एक अहस्ताक्षरित 32-बिट है time_t, चूँकि पुराने रिलीज़ में हस्ताक्षरित प्रकार का उपयोग किया गया था।

पॉज़िक्स और खुला समूह यूनिक्स विनिर्देशों में सी मानक पुस्तकालय सम्मिलित है, जिसमें समय प्रकार और समय में परिभाषित कार्य सम्मिलित हैं। एच <time.h>हेडर फाइल। आईएसओ सी मानक बताता है कि time_t एक अंकगणितीय प्रकार होना चाहिए, किंतु इसके लिए किसी विशिष्ट प्रकार या एन्कोडिंग को अनिवार्य नहीं करता है। पॉज़िक्स की आवश्यकता है time_t एक पूर्णांक प्रकार होने के लिए, किंतु यह अनिवार्य नहीं है कि यह हस्ताक्षरित या अहस्ताक्षरित हो।

यूनिक्स में सीधे गैर-पूर्णांक यूनिक्स समय संख्याओं को बाइनरी अंशों के रूप में प्रस्तुत करने की कोई परंपरा नहीं है। इसके अतिरिक्त, उप-सेकंड परिशुद्धता वाले समय को समग्र डेटा प्रकार का उपयोग करके दर्शाया जाता है जिसमें दो पूर्णांक होते हैं, पहला एक time_t (यूनिक्स समय का अभिन्न अंग), और दूसरा मिलियनवें (में) समय संख्या का आंशिक भाग है struct timeval) या अरबवें (में struct timespec).[11][12] ये संरचनाएं एक दशमलव-आधारित फिक्स्ड-पॉइंट अंकगणित प्रदान करती हैं। फिक्स्ड-पॉइंट डेटा प्रारूप, जो कुछ अनुप्रयोगों के लिए उपयोगी है, और दूसरों के लिए परिवर्तित करने के लिए तुच्छ है।

यूटीसी आधार

लीप सेकेंड के साथ यूटीसी का वर्तमान स्वरूप केवल 1 जनवरी 1972 से परिभाषित किया गया है। इससे पहले, 1 जनवरी 1961 से यूटीसी का एक पुराना रूप था जिसमें न केवल सामयिक समय चरण थे, जो गैर-पूर्णांक द्वारा थे सेकंड की संख्या, किंतु साथ ही यूटीसी सेकंड एसआई सेकंड की तुलना में थोड़ा लंबा था, और समय-समय पर पृथ्वी के घूर्णन को निरन्तर अनुमानित करने के लिए बदल गया। 1961 से पहले कोई यूटीसी नहीं था, और 1958 से पहले कोई व्यापक परमाणु घड़ी नहीं थी; इन युगों में, परमाणु कालमान के अतिरिक्त जीएमटी (पृथ्वी के घूर्णन पर सीधे आधारित) के कुछ सन्निकटन का उपयोग किया गया था।

यूटीसी के एन्कोडिंग के रूप में यूनिक्स समय की स्पष्ट परिभाषा यूटीसी के वर्तमान स्वरूप पर प्रयुक्त होने पर ही विवादास्पद है। यूटीसी के इस रूप की प्रारंभ से पहले का यूनिक्स युग इस युग में इसके उपयोग को प्रभावित नहीं करता है: 1 जनवरी 1970 (यूनिक्स युग) से 1 जनवरी 1972 (यूटीसी की प्रारंभिक) तक के दिनों की संख्या प्रश्न में नहीं है और दिनों की संख्या यूनिक्स समय के लिए महत्वपूर्ण है।

नीचे यूनिक्स समय मूल्यों का अर्थ +63072000 (यानी, 1 जनवरी 1972 से पहले) स्पष्ट रूप से परिभाषित नहीं है। ऐसे यूनिक्स टाइम्स के आधार को यूटीसी का एक अनिर्दिष्ट सन्निकटन माना जाता है। उस युग के कंप्यूटरों में संभवतः ही कभी ऐसी घड़ियां होती थीं जो किसी भी स्थिति में अर्थपूर्ण सब-सेकंड टाइमस्टैम्प प्रदान करने के लिए पर्याप्त रूप से स्पष्ट रूप से सेट की गई हों। यूनिक्स समय उप-सेकंड परिशुद्धता की आवश्यकता वाले अनुप्रयोगों में 1972 से पहले के समय का प्रतिनिधित्व करने का एक उपयुक्त विधि नहीं है; ऐसे अनुप्रयोगों को कम से कम यह परिभाषित करना चाहिए कि वे किस प्रकार के यूटी या जीएमटी का उपयोग करते हैं।

As of 2009, सिविल टाइम में लीप सेकेंड के उपयोग को समाप्त करने की संभावना पर विचार किया जा रहा है।[13] इस परिवर्तन को निष्पादित करने का एक संभावित साधन एक नए समय के मापदंड को परिभाषित करना है, जिसे अंतर्राष्ट्रीय समय कहा जाता है, जो प्रारंभ में यूटीसी से मेल खाता है किंतु उसके बाद कोई लीप सेकंड नहीं है, इस प्रकार टीएआई से निरन्तर ऑफसेट पर रहता है। यदि ऐसा होता है, तो संभावना है कि यूटीसी के अतिरिक्त यूनिक्स समय को इस नए समय के मापदंड के संदर्भ में संभावित रूप से परिभाषित किया जाएगा। इस बारे में अनिश्चितता कि क्या यह घटित होगा संभावित यूनिक्स समय को पहले से कम अनुमानित नहीं बनाता है: यदि यूटीसी के पास आगे कोई लीप सेकंड नहीं होता तो परिणाम वही होता है।

इतिहास

यूनिक्स समय के प्रारंभिक संस्करणों में 60 हेटर्स की दर से 32-बिट पूर्णांक वृद्धि हुई थी, जो प्रारंभिक यूनिक्स सिस्टम के हार्डवेयर पर सिस्टम क्लॉक की दर थी। इस तरह संग्रहीत टाइमस्टैम्प केवल ढाई साल से कुछ अधिक की सीमा का प्रतिनिधित्व कर सकते हैं। अतिप्रवाह को रोकने के लिए यूनिक्स रिलीज के साथ युग की गणना की जा रही थी, 1 जनवरी 1971 और 1 जनवरी 1972 की मध्यरात्रि को यूनिक्स के प्रारंभिक विकास के समय युगों के रूप में उपयोग किया जा रहा था। यूनिक्स समय की प्रारंभिक परिभाषाओं में भी समय क्षेत्र का अभाव था।[14][15]

1 जनवरी 1970 00:00:00 यूटीसी के वर्तमान युग को यूनिक्स इंजीनियरों द्वारा इच्छानुसार रूप से चुना गया था क्योंकि इसे काम करने के लिए एक सुविधाजनक तिथि माना जाता था। शॉर्ट-टर्म ओवरफ्लो से बचने के लिए स्पष्टता को सेकंड में गिनने के लिए बदल दिया गया था।[1]

जब पोसिक्स.1 लिखा गया था, तो यह सवाल उठा कि लीप सेकंड के सामने time_tको स्पष्ट रूप से कैसे परिभाषित किया जाए। पोसिक्स समिति ने विचार किया कि क्या यूनिक्स समय, युग के बाद से सेकंड की एक रेखीय गणना के रूप में रहना चाहिए, सिविल समय के साथ रूपांतरण में जटिलता की कीमत पर या सिविल समय का प्रतिनिधित्व, लीप सेकंड के आसपास असंगतता की कीमत पर। युग की कंप्यूटर घड़ियां एक या दूसरे विधि से मिसाल कायम करने के लिए पर्याप्त रूप से स्पष्ट रूप से सेट नहीं थीं।

पोसिक्स समिति को पुस्तकालय कार्यों में जटिलता के विपरीत तर्कों से प्रभावित किया गया था और यूटीसी समय के तत्वों के संदर्भ में सरल विधि से यूनिक्स समय को दृढ़ता से परिभाषित किया गया था। यह परिभाषा इतनी सरल थी कि इसमें ग्रेगोरियन कैलेंडर के पूरे लीप वर्ष नियम को भी सम्मिलित नहीं किया गया था और 2100 को एक लीप वर्ष बना दिया जाएगा।

पोसिक्स 1 के 2001 के संस्करण ने यूनिक्स समय की परिभाषा में दोषपूर्ण लीप वर्ष नियम को सुधारा, किंतु यूनिक्स समय की आवश्यक परिभाषा को एक रैखिक समय मापदंड के अतिरिक्त यूटीसी के एन्कोडिंग के रूप में बनाए रखा था। 1990 के दशक के मध्य से, कंप्यूटर घड़ियों को नियमित रूप से इसके लिए पर्याप्त स्पष्टता के साथ सेट किया गया है, और वे सामान्यतः यूनिक्स समय की यूटीसी-आधारित परिभाषा का उपयोग करके सेट की गई हैं। इसके परिणामस्वरूप यूनिक्स कार्यान्वयन में और नेटवर्क टाइम प्रोटोकॉल में, जब भी लीप सेकेंड होते हैं, यूनिक्स समय संख्या में कदमों को निष्पादित करने में अधिक जटिलता होती है।

उपयोग

यूनिक्स समय व्यापक रूप से यूनिक्स के सिस्टम समय के रूप में अपने मूल अनुप्रयोग से परे कंप्यूटिंग में अपनाया जाता है। यूनिक्स समय लगभग सभी सिस्टम प्रोग्रामिंग एपीआई में उपलब्ध है, जिसमें यूनिक्स-आधारित और गैर-यूनिक्स ऑपरेटिंग सिस्टम दोनों द्वारा प्रदान किया गया है। लगभग सभी आधुनिक प्रोग्रामिंग भाषाएँ यूनिक्स समय के साथ काम करने या उन्हें किसी अन्य डेटा संरचना में परिवर्तित करने के लिए एपीआई प्रदान करती हैं। यूनिक्स समय का उपयोग कई फाइल सिस्टम, फ़ाइल स्वरूपों और डेटाबेस में टाइमस्टैम्प को संग्रहित करने के लिए एक तंत्र के रूप में भी किया जाता है।

C मानक पुस्तकालय सभी दिनांक और समय कार्यों के लिए यूनिक्स समय का उपयोग करता है, और यूनिक्स समय को कभी-कभी time_t के रूप में संदर्भित किया जाता है, सी (प्रोग्रामिंग भाषा) और सी ++ में टाइमस्टैम्प के लिए उपयोग किए जाने वाले डेटा प्रकार का नाम C के यूनिक्स टाइम फ़ंक्शंस को पोसिक्स विनिर्देशन में सिस्टम टाइम एपीआई के रूप में परिभाषित किया गया है।[16] सी मानक पुस्तकालय का उपयोग सभी आधुनिक डेस्कटॉप ऑपरेटिंग सिस्टमों में बड़े मापदंड पर किया जाता है, जिसमें माइक्रोसॉफ़्ट विंडोज़ और यूनिक्स जैसे सिस्टम जैसे मैकोज़ और लिनक्स सम्मिलित हैं, जहां यह एक मानक प्रोग्रामिंग इंटरफ़ेस है।[17][18][19]

आईओएस एक स्विफ्ट एपीआई प्रदान करता है जो 1 जनवरी 2001 के युग का उपयोग करने के लिए डिफ़ॉल्ट है किंतु यूनिक्स टाइमस्टैम्प के साथ भी इसका उपयोग किया जा सकता है।[20] एंड्रॉइड (ऑपरेटिंग सिस्टम) अपने सिस्टम टाइम एपीआई के लिए टाइमज़ोन के साथ यूनिक्स समय का उपयोग करता है।[21]

विंडोज आंतरिक रूप से समय संग्रहीत करने के लिए यूनिक्स समय का उपयोग नहीं करता है, किंतु इसका उपयोग सिस्टम एपीआई में करता है, जो सी ++ में प्रदान किया जाता है और सी मानक पुस्तकालय विनिर्देश को प्रयुक्त करता है।[17] विंडोज़ निष्पादनयोग्य के लिए पीई प्रारूप में यूनिक्स समय का उपयोग किया जाता है।[22]

यूनिक्स समय सामान्यतः प्रमुख प्रोग्रामिंग भाषाओं में उपलब्ध है और व्यापक रूप से डेस्कटॉप, मोबाइल और वेब एप्लिकेशन प्रोग्रामिंग में उपयोग किया जाता है। जावा (प्रोग्रामिंग भाषा) एक इंस्टेंट ऑब्जेक्ट प्रदान करता है जो सेकंड और नैनोसेकंड दोनों में एक यूनिक्स टाइमस्टैम्प रखता है।[23] पायथन (प्रोग्रामिंग भाषा) एक समय पुस्तकालय प्रदान करता है जो यूनिक्स समय का उपयोग करता है।[24] जावास्क्रिप्ट एक दिनांक पुस्तकालय प्रदान करता है जो यूनिक्स युग के बाद से मिलीसेकंड में टाइमस्टैम्प प्रदान करता है और संग्रहीत करता है और सभी आधुनिक डेस्कटॉप और मोबाइल वेब ब्राउज़र्स के साथ-साथ नोड.जेएस जैसे जावास्क्रिप्ट सर्वर वातावरण में प्रयुक्त किया जाता है।[25]

यूनिक्स-आधारित ऑपरेटिंग सिस्टम के साथ उपयोग के लिए डिज़ाइन किए गए फाइलसिस्टम यूनिक्स समय का उपयोग करते हैं। एपीएफएस, सभी एप्पल उपकरणों में डिफ़ॉल्ट रूप से उपयोग की जाने वाली फ़ाइल प्रणाली, और एक्स्ट4 , जो लिनक्स और एंड्रॉयड उपकरणों पर व्यापक रूप से उपयोग की जाती है, दोनों फ़ाइल टाइमस्टैम्प के लिए नैनोसेकंड में यूनिक्स समय का उपयोग करते हैं।[26][27] कई संग्रह फ़ाइल प्रारूप यूनिक्स समय में आरएआर (फ़ाइल स्वरूप) और टार (कंप्यूटिंग) सहित टाइमस्टैम्प स्टोर कर सकते हैं।[28][29] यूनिक्स समय का उपयोग सामान्यतः माई एसक्यूएल और पोस्टग्रेएसक्यूएल सहित डेटाबेस में टाइमस्टैम्प को स्टोर करने के लिए भी किया जाता है।[30][31]


सीमाएं

यूनिक्स समय को कैलेंडर की तारीखों और समय को कॉम्पैक्ट विधि से एन्कोड करने के लिए डिज़ाइन किया गया था, जिसका उद्देश्य कंप्यूटर द्वारा आंतरिक रूप से उपयोग करना था। इसका उद्देश्य मनुष्यों द्वारा आसानी से पढ़ा जाना या समयक्षेत्र-निर्भर मूल्यों को संग्रहीत करना नहीं है। यह सेकंड में समय का प्रतिनिधित्व करने के लिए डिफ़ॉल्ट रूप से भी सीमित है, जब समय की अधिक स्पष्ट माप की आवश्यकता होती है, जैसे कार्यक्रमों के निष्पादन समय को मापते समय इसे उपयोग के लिए अनुपयुक्त बना दिया जाता है।[32]

प्रतिनिधित्व योग्य समय की सीमा

32-बिट यूनिक्स समय अतिप्रवाह जो 2038 में घटित होगा

डिज़ाइन के अनुसार यूनिक्स समय को संचयन के लिए एक विशिष्ट आकार की आवश्यकता नहीं होती है, किंतु यूनिक्स समय के अधिकांश सामान्य कार्यान्वयन अंतर्निहित कंप्यूटर के शब्द आकार के साथ एक हस्ताक्षरित पूर्णांक का उपयोग करते हैं। चूंकि अधिकांश आधुनिक कंप्यूटर 32-बिट या 64-बिट हैं, और बड़ी संख्या में प्रोग्राम अभी भी 32-बिट संगतता मोड में लिखे गए हैं, इसका अर्थ है कि यूनिक्स समय का उपयोग करने वाले कई प्रोग्राम हस्ताक्षरित 32-बिट पूर्णांक फ़ील्ड का उपयोग कर रहे हैं। हस्ताक्षरित 32 बिट पूर्णांक का अधिकतम मान 231-1 है, और न्यूनतम मान -(231) है, जिससे 13 दिसंबर 1901 से पहले (20:45:52 यूटीसी पर) या 19 जनवरी 2038 (पर) के बाद की तारीखों का प्रतिनिधित्व करना असंभव हो जाता है। 03:14:07 यूटीसी)। प्रारंभिक कटऑफ का उन डेटाबेस पर प्रभाव पड़ सकता है जो ऐतिहासिक जानकारी संग्रहीत कर रहे हैं; कुछ डेटाबेस में जहां टाइमस्टैम्प के लिए 32-बिट यूनिक्स समय का उपयोग किया जाता है, 1901 से पहले की तारीखों को दर्शाने के लिए समय को फ़ील्ड के एक अलग रूप, जैसे स्ट्रिंग, में संग्रहीत करना आवश्यक हो सकता है। देर से कटऑफ को वर्ष 2038 समस्या के रूप में जाना जाता है और जैसे-जैसे तारीख समीप आती है, समस्याएँ उत्पन्न होने की संभावना होती है, क्योंकि 2038 कटऑफ से आगे की तारीखें 1901 में प्रतिनिधित्व योग्य सीमा की शुरुआत के आसपास आ जाएंगी।[32]: 60 

तिथि सीमा कटऑफ यूनिक्स समय के 64-बिट प्रतिनिधित्व के साथ कोई समस्या नहीं है, क्योंकि हस्ताक्षरित 64-बिट पूर्णांक में संग्रहीत यूनिक्स समय के साथ प्रतिनिधित्व योग्य तिथियों की प्रभावी सीमा 584 बिलियन वर्ष से अधिक है।[32]: 60-61 [33]


विकल्प

यूनिक्स समय समय के लिए एकमात्र मानक नहीं है जो एक युग से दूर गिना जाता है। माइक्रोसॉफ्ट विंडोज़ पर, FILETIME 1 जनवरी 1601 को 0:00 जीएमटी के बाद से बीत चुके 100-नैनोसेकंड अंतराल की गिनती के रूप में स्टोर समय टाइप करें।[34] विंडोज एपोच टाइम का उपयोग फाइलों के लिए टाइम स्टैम्प स्टोर करने के लिए किया जाता है[35] और सक्रिय निर्देशिका समय सेवा जैसे प्रोटोकॉल में[36] और सर्वर संदेश ब्लॉक है |

कंप्यूटरों के बीच समय का समन्वय करने के लिए उपयोग किया जाने वाला नेटवर्क टाइम प्रोटोकॉल 1 जनवरी 1900 के युग का उपयोग करता है, जिसे सेकंड के लिए एक अहस्ताक्षरित 32-बिट पूर्णांक में गिना जाता है और भिन्