डेवलपर टूल · Unix टाइमस्टैम्प कन्वर्टर
ISO 8601 बनाम RFC 3339: आपके API प्रतिक्रियाओं के पीछे दो दिनांक प्रारूप
· पेजभूमि
टाइम स्टाम्प्स आईएसओ-8601 शहद की मक्खी
अधिकांश APआई ISO 8601 का उपयोग करने का दावा करते हैं और वास्तव में RFC 3339 का उपयोग करते हैं, जो इंटरनेट के लिए डिज़ाइन की गई एक सख्त प्रोफ़ाइल है। यह पोस्ट दो दस्तावेज़ों, उनके अंतरों और वे युग पूर्णांकों से कैसे संबंधित हैं, बताती है।
'ISO 8601' फ़ील्ड जो वैध ISO 8601 को अस्वीकार करता है - एक सप्ताह की तारीख या कम-सटीक मान API को भेजा जाता है जो अपेक्षित RFC 3339 है
एक API फ़ील्ड जिसे सामान्य रूप से "ISO 8601" के रूप में वर्णित किया गया है, केवल एक दिनांक-समय आकार स्वीकार कर सकता है। अन्य मानक-मान्य प्रतिनिधित्व भेजने से भी इसका पार्सर विफल हो सकता है। इसका उपाय छत्र नाम से बहस करना नहीं है; यह उदाहरणों और सत्यापन परीक्षणों के साथ सटीक तार व्याकरण का दस्तावेजीकरण करना है।
ToolAcre `Date.toISOString()` से एक स्थिर कैनोनिकल आउटपुट का योगदान देता है, लेकिन यह हर प्रतिनिधित्व के लिए एक अनुरूपता सूट नहीं है। जेनरेट की गई स्ट्रिंग को एक उपयोगी इंटरचेंज फॉर्म के रूप में मानें और इसकी तुलना उस API अनुबंध से करें जो वास्तव में आपके पास है।
इसलिए एक स्कीमा को नियमित अभिव्यक्ति या औपचारिक प्रकार तभी प्रकाशित करना चाहिए जब वह पार्सर को सटीक रूप से प्रतिबिंबित करता हो। अकेले उदाहरण उपयोगी हैं, लेकिन स्पष्ट अस्वीकृति के मामले अस्पष्टता को बंद कर देते हैं।
एक व्यापक दिनांक मानक और एक संकीर्ण API व्याकरण विनिमेय नहीं हैं
जेनरेट किए गए फॉर्म में कैलेंडर दिनांक, `T`, मिलीसेकंड के माध्यम से समय और अनुगामी Z शामिल है। कार्यान्वयन इसे UI में ISO 8601 (UTC) कहता है। इनपुट वही स्वीकार करता है जो JavaScript दिनांक पढ़ता है, जिसमें एक स्पष्ट ऑफसेट और स्थानीय पिकर का ज़ोन रहित दिनांक-समय आकार शामिल है।
वह व्यवहार पूर्ण मानक पार्सर की तुलना में बहुत संकीर्ण है। सप्ताह की तारीखें, अंतराल, अवधि और कम सटीकता का कोई भंडार परीक्षण नहीं है। एक ब्राउज़र द्वारा स्वीकार की गई स्ट्रिंग दिनांक की सभी भाषाओं में गारंटी नहीं है, और एक अस्वीकृत विशेष फ़ॉर्म अन्यत्र इसकी स्थिति को अस्वीकार नहीं करता है।
आउटपुट की निश्चित मिलीसेकंड परिशुद्धता एक स्वरूपण विकल्प है, यह सबूत नहीं है कि स्रोत ने मिलीसेकंड को मापा है। हो सकता है कि दिनांक को पूरा दूसरा मान प्राप्त हुआ हो और फिर भी वह `.000` प्रिंट करता हो।
ToolAcre एक ISO-आकार का रूप उत्सर्जित करता है; यह पूर्ण ISO 8601 मानक को मान्य नहीं करता है
कार्यपुस्तिका में RFC 3339, उसका वर्ष और अनिवार्य ऑफसेट नियम बताए गए हैं। स्रोत सेट में कोई RFC टेक्स्ट या समर्पित पार्सर मौजूद नहीं है, इसलिए उन विवरणों पर जोर नहीं दिया गया है। लेखन अनुबंध में स्मृति से किसी शीर्षक का हवाला देने के बजाय असमर्थित परिशुद्धता को छोड़ने की आवश्यकता होती है।
यदि आपके API का अर्थ RFC 3339 है, तो इसे स्कीमा में नाम दें और वास्तविक विनिर्देश पर आधारित कार्यान्वयन के विरुद्ध परीक्षण करें। ToolAcre तुलना के लिए किसी ज्ञात युग को उसके UTC ISO आउटपुट से जोड़ सकता है, लेकिन यह प्रमाणित नहीं कर सकता कि मनमाना इनपुट उस प्रोफ़ाइल को संतुष्ट करता है।
यह एक एडिटरीय और इंजीनियरिंग सुरक्षा उपाय है: मानक प्रोफ़ाइल सटीक अनुबंध हैं, और पाठ के बिना उन्हें व्याख्या करने से दस्तावेज़ीकरण में आवश्यकताओं को बदलने का जोखिम होता है।
RFC 3339 आवश्यकताओं के लिए एक बाहरी मानक स्रोत की आवश्यकता होती है जो इस भंडार में मौजूद नहीं है
वैकल्पिक विभाजक, लोअरकेस डिज़ाइनर और `−00:00` के बारे में दावे सटीक मानक भाषा पर निर्भर करते हैं। उन्हें यहां छोड़ दिया गया है. कन्वर्टर का अपना ज़ोन डिटेक्टर अनुवर्ती Z या संख्यात्मक `±HH:MM` को पहचानता है और ज़ोन रहित दिनांक-समय को स्थानीय के रूप में चिह्नित करता है; यही वह सीमा है जिसे हम सत्यापित कर सकते हैं।
स्पष्ट स्वीकृत उदाहरणों और अस्वीकृति मामलों से API सत्यापन बनाएं। JavaScript दिनांक के सुविधा पार्सर से अनुमति का अनुमान न लगाएं। एक अनुमेय ब्राउज़र उस इनपुट को सामान्य कर सकता है जिसे एक सख्त सर्वर सही ढंग से अस्वीकार कर देता है, मैन्युअल परीक्षण के दौरान इंटरऑपरेबिलिटी दोषों को छुपाता है।
एक समर्पित मानक-जागरूक पार्सर को संरचित त्रुटि कारण लौटाना चाहिए। दिनांक को व्यापक इनपुट को सामान्य करने देने से API सत्यापन बग बाद में क्रॉस-प्लेटफ़ॉर्म विसंगति में बदल सकता है।
विशिष्ट विभाजक और अज्ञात-ऑफ़सेट नियम मानक पाठ के बिना छोड़े गए हैं
जब इकाई और मूल निश्चित हो जाते हैं तो युग मान अंकगणित और क्रम को सघन बनाते हैं। पाठ्य दिनांक-समय UTC या ऑफसेट रीडिंग को लोगों के लिए दृश्यमान बनाते हैं और पारगमन में उस डिज़ाइनर को संरक्षित करते हैं। कई APआई JavaScript पूर्णांक या इकाई अस्पष्टता से बचने के लिए एक कैनोनिकल स्ट्रिंग चुनते हैं।
यदि API में दोनों शामिल हैं, तो परिभाषित करें कि कौन सा क्षेत्र आधिकारिक है और परीक्षण समझौता है। एक ताजा युग के बगल में एक पुरानी स्वरूपित स्ट्रिंग अकेले से भी बदतर है। ToolAcre पूर्णांक को परिवर्तित करके और उत्पन्न ISO मान की जांच करके जोड़ी की तुलना कर सकता है, लेकिन स्थिरता प्रवर्तन निर्माता पर निर्भर करता है।
कार्यान्वित उदाहरण: एक क्षण, चार प्रतिनिधित्व - युग सेकंड, युग मिलीसेकंड, एक RFC 3339 स्ट्रिंग UTC में और एक स्थानीय ऑफसेट के साथ
तत्काल `2025-02-03T10:22:00.000Z` का उपयोग करें। इसके युग रूप 1,738,578,120 सेकंड और 1,738,578,120,000 मिलीसेकंड हैं। एक स्पष्ट-ऑफ़सेट रीडिंग `2025-02-03T12:22:00+02:00` है; इसे ToolAcre में पार्स करने से वही युग और विहित UTC ISO पंक्ति मिलती है।
ये चार रिपॉजिटरी-सत्यापन योग्य प्रतिनिधित्व हैं: सेकंड, मिलीसेकंड, आईएसओस्ट्रिंग आउटपुट और एक दिनांक-पार्स्ड संख्यात्मक-ऑफ़सेट स्ट्रिंग। उदाहरण यह दावा नहीं करता है कि प्रत्येक बाहरी पार्सर समान भिन्नात्मक परिशुद्धता या ऑफसेट सिंटैक्स को स्वीकार करता है। शिपिंग से पहले API का अपना सत्यापन चलाएँ।
लिखित घड़ी से +02:00 ऑफसेट घटाने पर 10:22 UTC प्राप्त होता है। पूर्ण मानक व्याकरण को सामान्यीकृत किए बिना इस विशेष इनपुट का परीक्षण करने के लिए वह सरल समानता पर्याप्त है।
कार्यान्वित उदाहरण: चार रूपों में से एक क्षण को यह भंडार सत्यापित कर सकता है
HTTP हेडर और ई-मेल तिथियां यहां लागू नहीं किए गए पाठ्य अनुबंधों का उपयोग करती हैं। ToolAcre उन प्रोटोकॉल को प्रारूपित नहीं करता है, न ही यह वादा करता है कि इसके ISO आउटपुट को प्रतिस्थापित किया जा सकता है। टाइमस्टैम्प का तत्काल एक ही हो सकता है जबकि इसके आवश्यक तार का प्रतिनिधित्व भिन्न होता है।
आधिकारिक विशिष्टताओं से कॉपी किए गए फिक्स्चर के साथ समर्पित एडेप्टर में प्रोटोकॉल क्रमांकन रखें। अंतर्निहित तात्कालिकता को सत्यापित करने के लिए युग रूपांतरण का उपयोग करें, फिर व्याकरण का अलग से परीक्षण करें। यह कैलेंडर-सही मान को वाक्य रचना की दृष्टि से अमान्य लिफाफे में समीक्षा से गुजरने से रोकता है।
समर्पित एडाप्टर को यह भी संरक्षित करना चाहिए कि गुम या अज्ञात ऑफसेट डोमेन का अर्थ रखता है या नहीं। प्रत्येक पाठ्य दिनांक को स्थानीय धारणा में समतल करने से वह जानकारी नष्ट हो सकती है।
अन्य पाठ्य प्रोटोकॉल कन्वर्टर के बाहर रहते हैं
व्यापक लेबल पर निर्भर रहने के बजाय उस संकीर्ण प्रारूप को निर्दिष्ट करें जिसे आपका API स्वीकार करता है। इस टूल के लिए, सबसे सुरक्षित प्रतिलिपि प्रस्तुत करने योग्य आउटपुट `toISOString()` द्वारा लौटाई गई UTC ISO स्ट्रिंग है, और सबसे सुरक्षित संख्यात्मक इनपुट में एक स्पष्ट सेकंड या मिलीसेकंड अनुबंध शामिल है।
ToolAcre उन रूपों को पाटता है और धारणाओं की रिपोर्ट करता है। यह सभी ISO 8601 या RFC 3339 किनारे के मामलों पर निर्णय नहीं देता है। व्याकरण, इकाई और ज़ोन डिज़ाइनर का स्पष्ट स्वामित्व ही टाइमस्टैम्प को पोर्टेबल बनाता है - किसी परिचित मानक नाम को किसी कम निर्दिष्ट फ़ील्ड से जोड़ना नहीं।
एक सटीक अनुबंध ग्राहकों को उपयोगी संदेशों के साथ जल्दी विफल होने देता है। एक व्यापक लेबल असहमति को रनटाइम में धकेलता है, जहां दो अन्यथा सही पार्सर अलग-अलग उपसमूह चुन सकते हैं।