- तारीख़ और समय के notation को संभालते समय RFC 3339 वेब और इंटरनेट में आसानी से इस्तेमाल होने वाले एक संकरे subset के करीब है, जबकि ISO 8601-1:2019 कहीं ज़्यादा व्यापक format set शामिल करता है
- तुलना का दायरा ISO 8601-1:2019 तक सीमित है, और ISO 8601-2:2019 की season, set, uncertainty qualification, date arithmetic जैसी अतिरिक्त expressions अभी table में शामिल नहीं हैं
- दोनों standards
2026-06-26,14:08:00Z,2026-06-26T14:08:00Z,+00:00offset जैसे व्यापक रूप से इस्तेमाल होने वाले basic date-time formats को कवर करते हैं - ISO 8601 century, decade, ordinal day, week date, abbreviated time, comma decimal, period (
P1Y) और range (2026-06-26/P1Y) तक को शामिल करता है, लेकिन RFC 3339 में table में इनमें से ज़्यादातर बाहर रखे गए हैं - Date-Time notation में
Tseparator और case sensitivity,-00:00offset जैसे अंतर असल parser compatibility तय करने वाले points बन जाते हैं
तुलना का दायरा और पूर्वधारणाएँ
- format table पूरी सूची नहीं है
- target standard ISO 8601-1:2019 है
- पुराने editions और drafts में महत्वपूर्ण अंतर हैं
- ISO 8601-2:2019 अतिरिक्त expressions शामिल करता है, लेकिन इस page में अभी शामिल नहीं है
- sub-year groups, उदाहरण के लिए seasons
- grouping units
- sets
- uncertainty qualification
- date arithmetic
- RFC 3339 सुझाव देता है कि downstream standards में
Tको किसी दूसरे character से बदला जा सकता है, लेकिन examples में केवल space character दिया गया है - हर standard उद्देश्य-विशेष formats define करता है, और बाकी formats की सिफ़ारिश नहीं की जाती
date notation में ISO 8601 ज़्यादा व्यापक है
- RFC 3339 और ISO 8601 दोनों
2026-06-26जैसी year-month-day date support करते हैं - ISO 8601, RFC 3339 की तुलना में date expressions की ज़्यादा variety कवर करता है
- century:
20 - decade:
202 - year:
2026 - year-month:
2026-06 - ordinal day:
2026-177 - week date:
2026-W26,2026-W26-5 - basic format:
20260626,2026177,2026W26,2026W265
- century:
- table में RFC 3339 ऊपर दिए गए ISO-only date formats की अनुमति नहीं देता
time notation के अंतर
- दोनों standards
14:08:00Z,14:08:00+00:00,14:08:00.372+00:00जैसे second-level time और timezone offset को अनुमति देते हैं - RFC 3339 case-sensitive नहीं है, इसलिए
TऔरZको क्रमशःt,zके रूप में लिखा जा सकता है- ISO 8601 के पुराने editions भी case-sensitive नहीं थे
- ISO 8601 सबसे छोटी time value में fractional part जोड़ने की अनुमति देता है
- table में मुख्यतः एक decimal digit वाले examples हैं, लेकिन standard arbitrary precision की अनुमति देता है
- decimal separator के रूप में comma और dot दोनों की अनुमति है, और सभी formats में इन्हें एक-दूसरे की जगह इस्तेमाल किया जा सकता है
- ISO 8601-1:2019 ambiguity न होने पर time-only expression में
Tछोड़ने की अनुमति देता है - ISO 8601
14,14:08,14:08:00,140800,T14:08:00,14:08:00,372जैसे abbreviated, basic और comma-decimal time expressions support करता है - RFC 3339
14:08:00-00:00जैसे-00:00offset की अनुमति देता है, लेकिन table में ISO 8601 इसकी अनुमति नहीं देता
Date-Time में T और separator
- RFC 3339 और ISO 8601 दोनों
2026-06-26T14:08:00Zऔर2026-06-26T14:08:00+00:00जैसे Date-Time को अनुमति देते हैं - ISO 8601 के Date-Time expression में
Tहमेशा ज़रूरी है- पुराने editions में Date-Time में
Tछोड़ना भी allowed था - पुराने editions में भी space या underscore जैसे वैकल्पिक characters insert करने की अनुमति नहीं थी
- पुराने editions में Date-Time में
- table में RFC 3339 निम्न Date-Time variants को अनुमति देता है
- lowercase
tऔरz:2026-06-26t14:08:00z - space separator:
2026-06-26 14:08:00Z - underscore separator:
2026-06-26_14:08:00Z -00:00offset:2026-06-26T14:08:00-00:00
- lowercase
- ISO 8601
2026-06-26T14,2026-06-26T14:08,2026-06-26T14:08:00,2026-177T14:08,2026-W26-5T14:08जैसे abbreviated Date-Time और ordinal day, week date based Date-Time को कवर करता है
periods और ranges ISO 8601 केंद्रित हैं
- table में Periods formats केवल ISO 8601 के लिए checked हैं
- उदाहरण:
P1Y,P1M,P1W,P1D - time शामिल examples:
PT1H,PT1M,PT1S - combination example:
P1Y1M1DT1H1M1S - fractional examples:
P1.5Y,P1,5W,PT1.5S
- उदाहरण:
- Ranges formats भी केवल ISO 8601 के लिए checked हैं
- date और period:
2026-06-26/P1Y - date और date:
2026-06-26/2026-06-26 - period और date:
P1Y/2026-06-26 - Date-Time और period:
2026-06-26T14:08/P1DT1H - repeating range:
R/2026-06-26/P1Y,R10/2026-06-26/P1Y
- date और period:
format keys और test tool
- format table
%Y,%M,%D,%h,%m,%sजैसे format keys का इस्तेमाल करता है%Y: Year%M: Month%D: Day%V: Week Year%W: Week%w: Week Day%O: Ordinal Day%h: Hour%m: Minute%s: Second%u: Microsecond%n: Nanosecond%Z: timezone hour, जिसमें+या-शामिल है%z: timezone minute
- format checker केवल यह verify करता है कि input format table के formats में आता है या नहीं
- यह सभी possible formats को check नहीं करता
- ISO 8601 as a Service beta testing के लिए service है
- फिलहाल केवल Date, Time, DateTime support करता है
- Period और Range support नहीं करता
- source GitHub पर public है
1 टिप्पणियां
Hacker News टिप्पणियां
यह अजीब है कि किसी खास time zone के आधार पर भविष्य की तारीख/समय बताने का कोई तरीका नहीं है। उदाहरण के लिए, आप 1 जुलाई 2030 को लंदन के स्थानीय समयानुसार शाम 6 बजे की meeting सेट करना चाह सकते हैं, और बीच में UK के time zone नियम जैसे भी बदलें, वह “लंदन में शाम 6 बजे” ही रहना चाहिए
अभी UK लगभग नवंबर–मार्च में Z+00:00 और अप्रैल–अक्टूबर में summer time Z+01:00 इस्तेमाल करता है[0], लेकिन 2030 से पहले वह Central European Time[1] अपना सकता है, British Double Summer Time[2] फिर से आज़मा सकता है, या summer time खत्म भी कर सकता है। इसलिए वही “शाम 6 बजे” किसी खास epoch के हिसाब से काफी अलग हो सकता है
calendar event में “उस समय के लंदन time में शाम 6 बजे” डालना चाहता हूं, लेकिन 2030-07-01 18:00:00 Europe/London को standard और interoperable तरीके से व्यक्त करने का कोई तरीका नहीं है
[0] https://en.wikipedia.org/wiki/British_Summer_Time
[1] https://en.wikipedia.org/wiki/Central_European_Time
[2] https://en.wikipedia.org/wiki/British_Summer_Time#Periods_of...
tzनाम से time zone जोड़ा जा सकता है, और local time व्यक्त करने के लिए UTC offset का अनुमानित मान भी साथ लिखना पड़ता हैउदाहरण के लिए
2030-07-01 18:00:00 Europe/London,2030-07-01T18:00:00+01:00[Europe/London]बनता है। अगर उससे पहले UK के नियम बदल जाएं तो timestamp “mismatch” हो जाएगा, और application तय करेगी कि उसे कैसे handle करना है। हालांकि square brackets में time zone नाम से पहले!डालने पर UTC offset को आंख मूंदकर मानने के बजाय समस्या detect करनी होगीयह extended timestamp format JavaScript की प्रस्तावित Temporal library[1] में भी इस्तेमाल होता है, और
ZonedDateTime.from()parsing function[2] mismatch timestamp में किस पक्ष को प्राथमिकता देनी है, यहoffsetoption से control करने देता है। UTC offset हटाकर केवल time zone लिखना भी supported है, लेकिन यह चेतावनी देता है कि summer time transition के दौरान दोहराया जाने वाला एक घंटे का interval ambiguous होता है[0] https://www.ietf.org/archive/id/draft-ietf-sedate-datetime-e...
[1] https://tc39.es/proposal-temporal/docs/strings.html#iana-tim...
[2] https://tc39.es/proposal-temporal/docs/ambiguity.html#ambigu...
लेकिन इस बीच Scotland फिर से independence referendum कराकर Central European Time में शामिल हो जाए या Scottish Standard Time बना दे, यह कल्पना से बाहर नहीं है
2023-11-05 01:30:00 America/New_Yorkदो अलग-अलग समयों में से कोई एक हो सकता हैcalendar में “wall clock पर वही समय” आम तौर पर वांछित अर्थ होता है, इसलिए यह ठीक है, लेकिन अजीब समयों को handle करने में UI की कठिनाई है और आप syntax में ambiguity resolve करने का तरीका डालना चाह सकते हैं। आम तौर पर ये transitions आधी रात को होते हैं, यह अच्छी बात है, लेकिन असली कामकाज में मैंने ऐसा होते देखा है
अगर आप ऐसे time zone के व्यक्ति को invite करते हैं जहां summer time नहीं है, तो उसके calendar में समय डोलता रहेगा, और कभी-कभी international colleagues को यह सहना पड़ता है
[0]: https://www.rfc-editor.org/rfc/rfc5545#section-3.3.5
आम date-time formats किसी खास instant को व्यक्त करने के लिए बनाए गए थे, लेकिन इस मामले में ऐसा कोई खास instant अभी है ही नहीं। हर महीने के आखिरी शुक्रवार की meeting, 31 जनवरी को शुरू होने वाली monthly meeting, quarter-end से दो दिन पहले जैसी date/time specifications का non-trivial structure होना आम बात है
लोग जिन सभी cases की कल्पना कर सकते हैं उन्हें cover करने वाला standard बनाना जल्दी ही जटिल हो जाएगा। अगर simple date, time, और instant पर्याप्त नहीं हैं, तो लगता है कि आवश्यक सभी elements रखने वाला अलग structure बनाना ही पड़ेगा
ISO स्पेसिफिकेशन मुफ्त में उपलब्ध नहीं है, इसलिए आम तौर पर RFC का पालन करना बेहतर होता है, और कई open source implementations भी draft पर आधारित हैं, इसलिए इसे पूरी तरह open source-friendly कहना मुश्किल है। open source developers के लिए भी यह बड़ा बोझ है
अगर आप भविष्य की तारीखों से जुड़ी कोई चीज़ बना रहे हैं, तो लगभग हमेशा wall-clock time + location को स्टोर करना चाहेंगे। दुर्भाग्य से इसके लिए कोई standard नहीं है। यूरोप और अमेरिका में time zones काफ़ी स्थिर हैं, इसलिए यह बात शायद ज़्यादा महसूस न हो, लेकिन कई क्षेत्रों में time zones अक्सर बदलते हैं, इसलिए offset स्टोर करना स्थिर नहीं है
2026년 6월 5일 13:30 벽시계, 파리वही है जो अधिकतर लोग कहना चाहते हैं, और EU daylight saving time के साथ क्या करेगा, इस पर निर्भर करते हुए यह UTC+2 भी हो सकता है या UTC+1 भी। अगर API अतीत के समय को संभालती है, तो बस seconds, milliseconds, microseconds, nanoseconds की units में POSIX timestamp इस्तेमाल कर लेना चाहिएiCal भी location को अलग time zone में reassign किए जाने की समस्या तक पर विचार नहीं करता। साथ ही, सही iCal file में refer किए गए सभी time zone data शामिल होते हैं, इसलिए जब केवल एक date-time output करना हो तो यह झंझट भरा है
[1] https://icalendar.org/iCalendar-RFC-5545/3-3-5-date-time.htm...
2026-06-05T13:30+0200[Europe/Paris]https://www.ietf.org/archive/id/draft-ietf-sedate-datetime-e...
standards में अक्सर नज़रअंदाज़ किया जाने वाला हिस्सा duration का representation है
http://xml.coverpages.org/ISO-FDIS-8601.pdf के 5.5.4.2 “Representation of time-interval by duration only”, पेज 21 को देखना चाहिए। अच्छा होगा अगर static languages के JSON parsers किसी field को duration के रूप में define करने और valid format में serialize करने दें
Crystal का proposal example यहां है: https://github.com/crystal-lang/crystal/issues/11942
उदाहरण के लिए 15 दिन 5 घंटे 20 सेकंड
P15DT5H0M20Sहोगा, और 7 सप्ताहP7Wdurationdefinition को भी refer किया जा सकता हैउदाहरण के लिए
"duration": { "days": 15, "hours": 5, "seconds": 20 }जैसा लिखें तो JSON parser को data का अर्थ समझने की ज़रूरत नहीं है; input validator इसे संभाल सकता है। वैसे भी JSON इस data को जिस भी तरह represent करे, failure की संभावना वाला एक conversion step तो चाहिए हीRFC 3339 और ISO 8601 में overlapping उद्देश्य वाले कई redundant date-time formats शामिल हैं, फिर भी सभी systems में सबसे ज़्यादा इस्तेमाल होने वाला और बिल्कुल obvious
2023-09-01 15:30:59दोनों में शामिल नहीं है—यह “मज़ेदार” हैसाथ ही दोनों standards BCE dates और
9999-12-31के बाद या-9999-01-01से पहले की dates को कैसे represent करना है, इस बारे में बहुत unclear हैं, और आम libraries आम तौर पर इन्हें बिल्कुल handle नहीं कर पातीं। अगर कर भी लें, तो00-01-01का behavior practically undefined जैसा हैGregorian calendar अजीब है क्योंकि 1 BC के बाद अगला साल 1 CE होता है, और specialist astronomy software को छोड़कर लगभग सभी software निकट भविष्य के Unix time range के बाहर ठीक से handle नहीं कर पाते। Augustus emperor के जन्म-मृत्यु वर्ष जैसी चीज़ों को string के रूप में store कर देना भी पर्याप्त हो सकता है, बस standard इसे स्पष्ट रूप से define कर दे
Tको space से बदला जा सकता है। RFC 3339 भी कहीं अधिक verbose तरीके से कुछ ऐसा ही करता हैयह भी पक्का कहना मुश्किल है कि
2023-09-01 15:30:59सबसे ज़्यादा इस्तेमाल होने वाला date-time format है। सबसे ज़्यादा इस्तेमाल होने वाली भाषा Chinese है, और2023年9月1日जैसे अपने separators आम हैंISO 8601 mutual agreement होने पर 1582 से पहले या 9999 के बाद के years की भी अनुमति देता है। अगर 4 digits में fit नहीं होता, तो आगे एक single sign character लगाना चाहिए। ऐसी dates के साथ meaningful तरीके से करने लायक चीज़ें कम होती हैं, इसलिए वे आम तौर पर supported नहीं होतीं, लेकिन खासकर C से स्वतंत्र रूप से implemented libraries में इन्हें parse करते हुए मैंने काफ़ी देखा है
00-01-01को 1 BCE January 1 के रूप में define किया गया है। ISO 8601 स्पष्ट करता है कि year numbering proleptic Gregorian calendar का पालन करती है, इसलिए इसे negative infinity तक extrapolate किया जाता हैमुझे समझ है कि non-space character की ज़रूरत क्यों थी, लेकिन कम से कम underscore या dot भी इस्तेमाल किया जा सकता था। और यह भी समझ नहीं आता कि string होते हुए भी year segment को चार digits तक सीमित करके format की universality क्यों sacrifice की गई
6-digit year भविष्यवादी दिखने के लिए, असल में कभी न आने वाली समस्या का समाधान जैसा लगता है। मौजूदा technology या social norms के 8000 साल तक बने रहने की कोई संभावना नहीं है
यह व्याख्या गलत है कि ISO 8601 U+2010 HYPHEN और U+2212 MINUS का उपयोग करता है, और जिन character sets में वे characters नहीं हैं, वहाँ U+2D HYPHEN-MINUS इस्तेमाल करना चाहिए
असल ISO 8601 स्पष्ट करता है कि अगर target character set ISO/IEC 646 आधारित है, तो दोनों मामलों में hyphen-minus character ही इस्तेमाल करना चाहिए। इसमें Unicode निश्चित रूप से शामिल है। थोड़ी अस्पष्टता है, लेकिन Unicode में interpretation साफ है, और यह 646 की standard mapping निर्दिष्ट करके 646 आधारित दूसरे character sets के साथ compatibility सुनिश्चित करने का अप्रत्यक्ष तरीका लगता है
इसका आशय है: “date और time expressions में इस्तेमाल होने वाले सभी characters, ‘hyphen’, ‘minus’, ‘plus-minus’ को छोड़कर, ISO/IEC 646 repertoire में आते हैं। ISO/IEC 646 आधारित character repertoire इस्तेमाल करने वाले environments में ‘hyphen’ और ‘minus’ दोनों को ‘hyphen-minus’ पर map करना चाहिए”
Unicode ISO 8859 आधारित है और ISO 8859, ISO 646 आधारित है, इसलिए Unicode character set में U+2D hyphen-minus इस्तेमाल करने का इरादा सही लगता है
Windows में colon एक special character है, इसलिए file name में date और time डालते समय RFC 3339 के अनुरूप कोई तरीका न होना अक्सर खटकता है
अच्छा होता अगर date में hyphen इस्तेमाल करते हुए colon हटाने पर भी ISO 8601 का पालन हो सकता। उदाहरण के लिए
20230831T1510-0500compliant है और file name में इस्तेमाल किया जा सकता है, लेकिन2023-08-31T1510-0500और मिलते-जुलते variants compliant नहीं हैं। साथ ही, PowerShell काGet-Datefunction hyphen और colon के बिना वाले पहले timestamp को समझ नहीं पाताइस topic पर यह बहुत अच्छी visualization है
date और time वाले हिस्सों को अलग करते समय
Tकी जगह space या underscore पसंद है, लेकिन ISO 8601-only processing से जुड़ी समस्याओं से बचने और consistency के लिए आम तौर परTही इस्तेमाल करता हूँTपसंद है। ऐसी string को गलती सेTके आधार पर split करने की नौबत नहीं आएगीदो बातें जाननी हैं। पहली, 6-digit year का आधार क्या है? अभी design किया गया कोई भी system 100,000 साल में मौजूद होने वाला नहीं है, है न
दूसरी, ISO 8601 तो व्यापक है, लेकिन क्या RFC 3339 भी real systems में खूब इस्तेमाल और adopt हुआ है?
timepackage और Rust केChronoमें RFC 3339 के लिए built-in tools हैं, लेकिन RFC 8601 के लिए नहींयाद है कि RFC 8601 में RFC 3339 में न होने वाली ambiguity issues थीं, और इसी वजह से Python में भी date round-trip conversion में समस्याएँ थीं
ऐसा कोई format नहीं है जिसमें timezone colon के बिना चार digits से specified हो, लेकिन
date +%z±NNNNreturn करता है%:zमौजूद है। इसी से जुड़ा,dateको default रूप से ऐसा output करने के लिए भी सिखाया जा सकता है: https://gist.github.com/d081dad407432d53172e30d0d35c39db$ date2023-08-31T11:15:00-07:00±NNNNअगर “basic format” के हिस्से के रूप में इस्तेमाल हो, तो colon के बिना भी valid है। यानी पूरे format में कहीं भी hyphen या colon नहीं होना चाहिएइसलिए ये दोनों equivalent हैं और दोनों valid हैं:
2023-09-01T09:40:01+08:0020230901T094001+0800