2013-06-25 5 views
5

को स्ट्रिंग मैं उपयोग करने के लिए कोशिश कर रहा हूँ:deserialize आईएसओ 8601 दिनांक समय सी # समयदिनाँक

JsonConvert.DeserializeObject<DateTime>("2009-02-15T00:00:00Z", new IsoDateTimeConverter()) 

लेकिन यह मुझे एक गलत FormatException: Input string was not in a correct format.

मैं क्या कर रहा हूँ देता है?

+0

उद्धरण के साथ इसे एम्बेड करने की आवश्यकता है। "\" 2009-02-15T00: 00: 00Z \ ""। धन्यवाद, रबर बतख! –

+0

डिर्क, आपने मेरी जिंदगी बचाई! – Raymond

+0

लॉल। संदेह है, लेकिन खुश है कि मैं वैसे भी मदद कर सकता था :) –

उत्तर

4

आप एक ही मूल्य को पार्स कर रहे हैं, सबसे सरल दृष्टिकोण शायद सिर्फ उपयोग करने के लिए है DateTime.ParseExact:

:

DateTime value = DateTime.ParseExact(text, "o", null); 

'ओ' के पैटर्न round-trip pattern, जो आईएसओ 8601 होने के लिए डिज़ाइन किया गया है

"ओ" या "ओ" मानक प्रारूप विनिर्देशक "yyyy '-' MM '-' dd'T'HH ':' mm ':' ss '।' FffffffK" दिनांक प्रारूप के लिए कस्टम प्रारूप स्ट्रिंग से मेल खाता है मूल्य और "yyyy" - 'MM' - 'dd'T'HH': 'mm': 'ss'। 'fffffffzzz "दिनांक प्रारूप के लिए कस्टम प्रारूप स्ट्रिंग।

मैं एक प्रारूप प्रदाता निर्दिष्ट नहीं किया है, के रूप में यह कोई फर्क नहीं पड़ता:

इस विनिर्देशक के लिए पैटर्न एक परिभाषित मानक (आईएसओ 8601) को दर्शाता है। इसलिए, यह हमेशा इस्तेमाल की जाने वाली संस्कृति या प्रारूप प्रदाता की परवाह किए बिना समान है।

यदि आपको अन्य मूल्यों को deserializing करते समय पारदर्शी रूप से संभालने के लिए Json.NET की आवश्यकता है, तो यह एक कठिन प्रस्ताव हो सकता है - अन्य लोग और जान सकते हैं।

इसके अतिरिक्त, एक प्लग के रूप में, आप मेरी Noda Time प्रोजेक्ट का उपयोग करने पर विचार करना चाहेंगे, जो आईएसओ -8601 का समर्थन करता है और JSON.NET के साथ एकीकृत करता है - यद्यपि अभी तक पूर्व-पैक किए गए तरीके से नहीं।

+0

आईएसओ -8601 रूपांतरण करने के लिए मैं नोडा टाइम का उपयोग कैसे करूं? –

+0

@ डेविडफेफर: नोडा समय 1.2 में, आप 'ऑफ़सेटडेट टाइमटाइम' को पार्स करने के लिए 'ऑफ़सेटडेट टाइमटाइंटर.इनियर इस्पोर्ट' का उपयोग करेंगे। या यदि यह हमेशा * अलग * ऑफसेट के बजाय 'Z' प्राप्त होता है, तो आप 'InstantPattern.GeneralPattern' का उपयोग कर सकते हैं। –

संबंधित मुद्दे