2010-08-23 17 views
8
DateTime dt = DateTime.ParseExact("1122010", "Mddyyyy", System.Globalization.CultureInfo.CurrentCulture); 

इस अपवाद को फेंकना: स्ट्रिंग को वैध दिनांक समय के रूप में पहचाना नहीं गया था।पार्स सरल दिनांक समय

मुझे यकीन है कि यह महीने में अग्रणी 0 की कमी है। सही प्रारूप स्ट्रिंग क्या है?

+0

आपका कोड नमूना शायद उस स्ट्रिंग के प्रकार को प्रदर्शित करने के लिए है जिसे आप पार्स कर रहे हैं। लेकिन अगर आप वास्तव में इस तरह अपना कोड परिभाषित कर रहे हैं, तो इसे करने से रोकें :) 'डेटटाइम' के रचनाकार/विधियों का उपयोग करें जो आपको स्पष्ट रूप से दिनांक निर्दिष्ट करने की अनुमति देते हैं। –

+0

@Merlyn, मुझे लगता है कि वह एक बाहरी स्रोत जैसे डेटा, एक फ्लैट फ़ाइल, सेवा इत्यादि से डेटा प्राप्त कर रहा है। मुझे नहीं लगता कि यह हार्डकोड किया जाएगा। –

+0

हां, यह एक निश्चित लंबाई फ़ाइल से है। यह एक हार्ड कोडित स्ट्रिंग को एक बारटाइम उदाहरण प्राप्त करने के लिए गूंगा होगा। – Darthg8r

उत्तर

11

मैं "MMddyyyy" प्रारूप का उपयोग करने का सुझाव देता हूं और यह सुनिश्चित करता हूं कि आपके इनपुट पैरामीटर में कम से कम 8 वर्ण हों। उदाहरण:

DateTime dt = DateTime.ParseExact("1122010".PadLeft(8, '0'), "MMddyyyy", System.Globalization.CultureInfo.CurrentCulture); 

आप अग्रणी 0 के साथ एक डेटा स्रोत महीने के लिए गायब उपयोग कर रहे हैं, इस लिए इसे जोड़ने जहां आवश्यक होगा।

+0

यह एक विशेष मामला परिदृश्य है, और शायद एकमात्र संभावित समाधान है। एमएसडीएन: यदि आप किसी कस्टम प्रारूप पैटर्न में दिनांक या समय विभाजक का उपयोग नहीं करते हैं, तो प्रदाता पैरामीटर के लिए invariant संस्कृति का उपयोग करें और प्रत्येक कस्टम प्रारूप विनिर्देशक का विस्तृत रूप उपयोग करें। उदाहरण के लिए, यदि आप पैटर्न में घंटों को निर्दिष्ट करना चाहते हैं, तो संकुचित रूप, "एच" के बजाय व्यापक रूप, "एचएच" निर्दिष्ट करें। – chilltemp

+0

ध्यान दें कि पैडिंग केवल 10 से कम महीनों के लिए काम करता है। यदि आप 10 से कम दिन के साथ ऐसा करने की कोशिश करते हैं, तो अजीब तिथियां दिखाई दे सकती हैं। या यहां तक ​​कि दोनों: '112010 '->' 00112010 'मैं हालांकि आठ पात्रों को सुनिश्चित करने पर सहमत हूं। – Caramiriel

4

समस्या यह है कि आप काम करने के लिए ParseExact पर्याप्त जानकारी नहीं दे रहे हैं।

"एम" का अर्थ 1 या 2 अंकों का है। लेकिन आपकी स्ट्रिंग "1122" से शुरू होती है। क्या वह 12 जनवरी या 22 नवंबर है?

एंथनी शो के रूप में एकमात्र समाधान, आवश्यक होने पर 0 के साथ पैड करना है।

1

एकल "एम" प्रारूप स्ट्रिंग अस्वीकार्य है क्योंकि सभी महीनों को एक अंक या चरित्र के साथ विशिष्ट रूप से प्रदर्शित नहीं किया जा सकता है। जैसा कि पहले सुझाव दिया गया था, आपको "MMddyyyy" का उपयोग करना होगा और आवश्यक होने पर बाएं स्ट्रिंग को पैड करना होगा।

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