C# में ISO 8601 में DateTime: सामान्य प्रश्नों के उत्तरों के साथ पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C# पर DateTime को ISO 8601 स्ट्रिंग में कैसे बदलें? वह समस्या जो अनुभवी डेवलपर्स को भी परेशान करती है

\n\n

क्या आपने कभी ऐसी स्थिति का सामना किया है जब आपका API "2023-01-15T10:30:00" फ़ॉर्मेट में दिनांक लौटाता है, और क्लाइंट इसे समझ नहीं पाता? या, इसके विपरीत, आप किसी बाहरी सेवा से दिनांक प्राप्त करते हैं, और वह "2023-01-15T10:30:00+03:00" जैसी दिखती है, और आपका पार्सर टूट जाता है? परिचित लगता है? यदि आप C# और DateTime ऑब्जेक्ट के साथ काम करते हैं, तो ISO 8601 स्ट्रिंग प्राप्त करने का प्रश्न एक क्लासिक है। Stack Overflow पर इस प्रश्न को हज़ारों बार देखा गया है, और यह व्यर्थ नहीं है। आज हम एक बार और हमेशा के लिए समझेंगे कि DateTime को ISO 8601 फ़ॉर्मेट स्ट्रिंग में सही तरीके से कैसे बदलें, सामान्य गलतियों से बचते हुए।

\n\n

हम केवल कोड की कुछ पंक्तियाँ नहीं दिखाएंगे। हम ISO 8601 के लिए C# DateTime फ़ॉर्मेट को समझेंगे, समय क्षेत्रों, मिलीसेकंड के साथ काम करेंगे और सबसे सामान्य प्रश्नों के उत्तर देंगे। चलिए शुरू करते हैं!

\n\n

ISO 8601 क्या है और यह क्यों महत्वपूर्ण है?

\n\n

ISO 8601 दिनांक और समय प्रस्तुत करने का एक अंतरराष्ट्रीय मानक है। यह इस तरह दिखता है: 2023-12-25T14:30:00.0000000+03:00। मुख्य विशेषताएं:

\n
    \n
  • दिनांक और समय के बीच विभाजक T।
  • \n
  • समय क्षेत्र अंत में इंगित किया जाता है (UTC के लिए Z या +05:00 जैसा ऑफ़सेट)।
  • \n
  • सेकंड का भिन्नात्मक भाग (मिलीसेकंड, टिक्स)।
  • \n
\n

इसकी आवश्यकता क्यों है? JSON, XML, REST API, डेटाबेस - हर जगह जहाँ समय में एक बिंदु के स्पष्ट संचरण की आवश्यकता होती है, सर्वर की स्थानीय संस्कृति से बंधे बिना। गलत फ़ॉर्मेट - और दूसरी तरफ आपका पार्सर घंटों को छोड़ सकता है या दिन और महीने को भ्रमित कर सकता है। इसलिए दिनांक प्रारूप ISO 8601 C# किसी भी बैकएंड डेवलपर के लिए एक must-have कौशल है।

\n\n

सबसे आसान तरीका: DateTime.ToString() फ़ॉर्मेट "o" के साथ

\n\n

C# में राउंड-ट्रिप फ़ॉर्मेट के लिए एक अंतर्निहित फ़ॉर्मेट स्पेसिफ़ायर है - यह अक्षर "o" (लोअरकेस) है। यह अधिकतम सटीकता के साथ पूर्ण ISO 8601 स्ट्रिंग देता है।

\n\n
DateTime now = DateTime.Now;\nstring isoString = now.ToString("o");\nConsole.WriteLine(isoString);\n// आउटपुट का उदाहरण: 2023-12-25T14:30:00.1234567+03:00
\n\n

यह ISO 8601 स्ट्रिंग C# प्राप्त करने का सबसे आसान तरीका है। लेकिन एक बारीकी है: यदि आपके DateTime में Kind = Unspecified है, तो स्ट्रिंग के अंत में समय क्षेत्र का कोई संकेत नहीं होगा। यह सख्त पार्सर्स के लिए एक समस्या हो सकती है। समाधान - हमेशा DateTimeOffset का उपयोग करें या स्पष्ट रूप से Kind सेट करें।

\n\n

मिलीसेकंड के बिना ISO 8601 कैसे प्राप्त करें?

\n\n

कभी-कभी मिलीसेकंड (या टिक्स) की आवश्यकता नहीं होती है। उदाहरण के लिए, लॉग या सरल दिनांक के लिए। कस्टम फ़ॉर्मेट का उपयोग करें:

\n\n
DateTime now = DateTime.UtcNow;\nstring isoShort = now.ToString("yyyy-MM-ddTHH:mm:ssK");\nConsole.WriteLine(isoShort);\n// उदाहरण: 2023-12-25T14:30:00Z
\n\n

यहाँ K समय क्षेत्र का स्पेसिफ़ायर है। UTC के लिए यह Z देता है, स्थानीय समय के लिए - ऑफ़सेट।

\n\n

समय क्षेत्रों की समस्या: DateTime बनाम DateTimeOffset

\n\n

डेवलपर्स का मुख्य दर्द DateTime और DateTimeOffset के बीच भ्रम है। यदि आप ISO 8601 दिनांक C# प्राप्त करना चाहते हैं जिसकी दुनिया में कहीं भी स्पष्ट रूप से व्याख्या की जाएगी, तो DateTimeOffset का उपयोग करें। इसमें हमेशा UTC से ऑफ़सेट होता है।

\n\n
DateTimeOffset nowOffset = DateTimeOffset.Now;\nstring isoOffset = nowOffset.ToString("o");\nConsole.WriteLine(isoOffset);\n// उदाहरण: 2023-12-25T14:30:00.1234567+03:00
\n\n

यदि आप DateTime के साथ काम कर रहे हैं, तो हमेशा इसकी Kind प्रॉपर्टी जांचें:

\n
    \n
  • DateTimeKind.Utc - अंत में Z देता है।
  • \n
  • DateTimeKind.Local - स्थानीय ऑफ़सेट देता है (उदाहरण के लिए, +03:00)।
  • \n
  • DateTimeKind.Unspecified - कुछ नहीं देता है

ब्लॉग

पुस्तक अनुशंसाएँ