लेख
ISO 8601 अवधि: P1DT2H का मतलब क्या है
YouTube API का एक जवाब बताता है कि किसी वीडियो की लंबाई PT4M13S है। किसी कैलेंडर निमंत्रण में P15DT5H0M20S जैसा मान होता है। कोई डायरेक्टरी सर्वर किसी अकाउंट पर 20260424174227.0Z जैसा टाइमस्टैंप लगाता है, जो देखने में जुड़ा हुआ लगता है लेकिन असल में बिल्कुल अलग चीज़ है। ये संक्षिप्त स्ट्रिंग्स ऐसे नियमों का पालन करती हैं जिन्हें जानना फ़ायदेमंद है, क्योंकि गलत तरीके से पढ़ने पर मिनट महीनों में बदल जाते हैं। यह ISO 8601 अवधि फ़ॉर्मैट का एक दौरा है: अक्षरों का मतलब क्या है, यह फ़ॉर्मैट कहां दिखता है, और इसकी सबसे बड़ी बारीकी, यानी इस तरह लिखी गई अवधि हमेशा एक तय समय-मात्रा नहीं होती।
P, T, और अक्षरों का मतलब
ISO 8601 अवधि P (period) से शुरू होती है। इसके बाद तारीख के हिस्से आते हैं, हर एक एक संख्या के बाद उसकी इकाई का अक्षर लगाकर लिखा जाता है: Y साल के लिए, M महीने के लिए, W हफ्ते के लिए, D दिन के लिए। T तारीख वाले हिस्से को समय वाले हिस्से से अलग करता है: H घंटे के लिए, M मिनट के लिए, S सेकंड के लिए। हर हिस्सा वैकल्पिक है; आप सिर्फ वही लिखते हैं जिसकी ज़रूरत हो। PT15M का मतलब है 15 मिनट, P1DT2H का मतलब है एक दिन और दो घंटे, P3W का मतलब है तीन हफ्ते। T सिर्फ सजावट नहीं है: M का मतलब इसके पहले महीने और इसके बाद मिनट होता है, इसलिए P1M एक महीना है जबकि PT1M एक मिनट है। मौजूद आख़िरी हिस्से में दशमलव भिन्न भी हो सकता है, जैसे PT0.5S आधे सेकंड के लिए। और इकाइयां अपने आप आगे नहीं बढ़तीं: PT90M डेढ़ घंटे लिखने का पूरी तरह मान्य तरीका है।

आप असल में यह फ़ॉर्मैट कहां देखते हैं
यह सिंटैक्स बिना ध्यान खींचे लगभग हर जगह मौजूद है। YouTube Data API हर वीडियो की लंबाई को ISO 8601 अवधि (PT4M13S) के रूप में बताता है। HTML time एलिमेंट के datetime एट्रिब्यूट में अवधि स्वीकार करता है। कैलेंडर निमंत्रण भी इसका इस्तेमाल करते हैं: iCalendar स्टैंडर्ड (RFC 5545) इवेंट की लंबाई PT1H0M0S जैसे लिखता है, हालांकि यह अपने व्याकरण से साल और महीने को हटा देता है। XML Schema का xs:duration पूरा रूप कवर करता है और नेगेटिव अवधि के लिए शुरुआत में माइनस चिह्न लगाने की भी इजाज़त देता है। स्टैंडर्ड लाइब्रेरीज़ इसे सीधे पार्स करती हैं: java.time, P और T स्ट्रिंग्स को Period.parse और Duration.parse से पढ़ता है, और यही बंटवारा कई और भाषाओं में भी मौजूद है। अगर आप मशीन-रीडेबल शेड्यूल, फ़ीड या API बनाते हैं, तो यह फ़ॉर्मैट "कितनी देर" बताने की साझा भाषा है।
P1M सेकंड की तय संख्या क्यों नहीं है
PT15M हमेशा 900 सेकंड के बराबर होता है। P1M ऐसा नहीं है: एक महीना 28, 29, 30 या 31 दिन का हो सकता है, यह इस पर निर्भर करता है कि वह कहां से शुरू होता है, इसलिए P1M तभी ठोस बनता है जब उसे किसी तारीख से जोड़ा जाए। यहां तक कि P1D भी 24 घंटे होने की गारंटी नहीं देता। यूरोपीय संघ में घड़ियां रविवार, 29 मार्च 2026 को आगे बढ़ा दी जाती हैं, इसलिए उस कैलेंडर दिन में सिर्फ 23 घंटे होते हैं: उसी शनिवार शाम में P1D (एक कैलेंडर दिन) जोड़ना और PT24H (ठीक 24 घंटे) जोड़ना, दो अलग-अलग समय-बिंदुओं पर पहुंचते हैं। यही वजह है कि java.time में दो प्रकार हैं, Period कैलेंडर इकाइयों के लिए और Duration सटीक सेकंड के लिए, और यही वजह है कि डेट लाइब्रेरीज़ किसी अवधि को बदलने से पहले एक संदर्भ तारीख मांगती हैं। Y, M, W और D हिस्सों को कैलेंडर गणना की तरह मानें, और सिर्फ H, M और S को तय समय-मात्रा की तरह।
अवधि नहीं: 20260424174227.0Z
20260424174227.0Z जैसी स्ट्रिंग देखने में उसी परिवार की लग सकती है, लेकिन यह असल में एक टाइमस्टैंप है, अवधि नहीं, और यह ISO 8601 भी नहीं है। यह GeneralizedTime है, ASN.1 से आया एक फ़ॉर्मैट, जो LDAP डायरेक्टरीज़ और X.509 सर्टिफ़िकेट में इस्तेमाल होने वाला नोटेशन है। इसे तय-चौड़ाई वाले फ़ील्ड्स की तरह पढ़ें: साल 2026, महीना 04, दिन 24, फिर 17:42:27, एक वैकल्पिक दशमलव भाग (.0), और UTC के लिए Z। आप इसे Active Directory के whenCreated और whenChanged जैसे एट्रिब्यूट्स में, LDAP एक्सपोर्ट्स में, और सर्टिफ़िकेट्स के अंदर देखते हैं, जहां RFC 5280, साल 2050 से आगे की वैधता तारीखों के लिए GeneralizedTime अनिवार्य करता है। इसे ISO 8601 के संक्षिप्त रूप से अलग बताने वाली निशानी T का न होना है: ISO होता तो वही पल 20260424T174227Z लिखा जाता।

स्पेक पढ़े बिना एक अवधि समझना
किसी एक बार की स्ट्रिंग के लिए, हमारा ISO अवधि कन्वर्टर किसी भी P/T अवधि को उसके हिस्सों और कुल सेकंड में तोड़ता है, और आपके टाइप किए नंबरों से स्ट्रिंग वापस बना देता है। जब आपके पास अवधि की स्ट्रिंग की जगह दो घड़ी-समय हों (जैसे 22:00 से 06:30 तक चलने वाली शिफ्ट), तो टाइम ड्यूरेशन कैलकुलेटर बीता हुआ समय बताता है, आधी रात पार करने वाले समय सहित। दोनों पूरी तरह आपके ब्राउज़र में चलते हैं: आप जो टाइप करते हैं वह आपके डिवाइस से बाहर कभी नहीं जाता। और बिना किसी टूल के जल्दी पढ़ने के लिए, दो आदतें ज़्यादातर मामलों को कवर करती हैं: T ढूंढें यह जानने के लिए कि M का मतलब महीने है या मिनट, और याद रखें कि T के बाईं ओर जो कुछ भी है वह कैलेंडर गणना है, सेकंड की तय संख्या नहीं।
इस लेख में उल्लेखित टूल्स
- ISO 8601 अवधि परिवर्तकISO 8601 अवधियों (P1Y2M…) को घटकों और सेकंडों में पार्स और परिवर्तित करें। ब्राउज़र में।
- समय अवधि कैलकुलेटरदिन के दो समयों के बीच की अवधि निकालें, रात पार करने वाले अंतरालों सहित। ब्राउज़र में।
- तारीख प्रारूप परिवर्तककिसी तारीख को ISO, US, यूरोपीय, बिंदुयुक्त, संक्षिप्त और Unix प्रारूपों में परिवर्तित करें। ब्राउज़र में।
अक्सर पूछे जाने वाले सवाल
क्या PT1M और P1M एक ही हैं?
नहीं। अक्षर M, T के बंटवारे के दोनों तरफ मतलब बदल देता है: P1M एक महीना है, PT1M एक मिनट है। यह इस फ़ॉर्मैट की सबसे आम गलत रीडिंग है, और इसी वजह से पहले कई बार API बग्स रिलीज़ हो चुके हैं। शक हो तो पहले T ढूंढें: उससे पहले जो कुछ भी है वह साल, महीने, हफ्तों और दिनों में गिना जाता है; उसके बाद जो कुछ भी है वह घंटों, मिनटों और सेकंड में गिना जाता है। सही ढंग से बनी अवधि में T से पहले कभी समय की इकाई नहीं आती और T के बाद कभी तारीख की इकाई नहीं आती।
90 मिनट को ISO 8601 अवधि के रूप में कैसे लिखें?
PT90M और PT1H30M दोनों मान्य हैं और एक ही मात्रा के समय को दिखाते हैं। ISO 8601 हिस्सों को उनकी पारंपरिक सीमा में रखने के लिए मजबूर नहीं करता, इसलिए 59 से ज़्यादा मिनट या 23 से ज़्यादा घंटे कोई दिक्कत नहीं हैं। पार्सर्स दोनों तरीकों को स्वीकार करते हैं; कोई सिस्टम कौन-सा तरीका देता है यह इस पर निर्भर करता है कि वह नॉर्मलाइज़ करता है या नहीं। अगर आप इंसानों के पढ़ने के लिए अवधि बना रहे हैं, तो PT1H30M ज़्यादा आसान है; अगर आप कोड में अवधियों की तुलना कर रहे हैं, तो स्ट्रिंग्स की बजाय उनके कुल सेकंड की तुलना करें, ठीक इसलिए क्योंकि दो अलग-अलग स्ट्रिंग्स एक ही मतलब रख सकती हैं।
अवधि (duration) और अंतराल (interval) में क्या फ़र्क है?
अवधि सिर्फ यह बताती है कि कितनी देर, बिना कैलेंडर पर किसी स्थिति के: P3D का मतलब है तीन दिन, चाहे वे कहीं से भी शुरू हों। ISO 8601 अंतराल किसी अवधि को असली तारीखों से जोड़ता है, और इसे स्लैश से लिखा जाता है: 2026-07-04T00:00:00Z/P3D का मतलब है 4 जुलाई 2026 से शुरू होने वाले तीन दिन, और शुरुआत/अंत की जोड़ी जैसे 2026-07-04/2026-07-07 भी वही अवधि दिखाती है। R उपसर्ग वाले दोहराए जाने वाले अंतराल भी होते हैं: R5/2026-07-04T00:00:00Z/P1D का मतलब है उस शुरुआती बिंदु से पांच रोज़ाना दोहराव। अंतराल कैलेंडर इकाइयों की अस्पष्टता को सुलझाते हैं, क्योंकि किसी तारीख से जुड़ा P1M हमेशा एक तय लंबाई रखता है।