2012-06-30 13 views
5

मैं एक ऐसे मुद्दे से फंस गया हूं जहां मैं एक स्ट्रिंग से दिनांक और समय को पार्स करने में असमर्थ हूं, जिसे मैं एक टेक्स्ट फ़ाइल से पढ़ रहा हूं। स्ट्रिंग मैं हो रही है निम्न स्वरूप में है:प्रारूप डीडीएमएमएमवाई हम्म (महीने-नाम के साथ)

05SEP1998 2400

और मैं निम्नलिखित कोड के माध्यम से स्ट्रिंग पार्स करने में कोशिश कर रहा हूँ:

string dateTimeStr = "05SEP1998 2400" 

var provider = CultureInfo.InvariantCulture; 

const string Format = "ddMMMyyyy hhmm"; 

var dateTime = DateTime.ParseExact(dateTimeStr, Format, provider); 

लेकिन जब पार्स करने, ऊपर कोड फेंकता एक FormatException:

String was not recognized as a valid DateTime.

सकता है किसी को भी कृपया ज मुझे इस मुद्दे को ठीक करने के लिए elp?

+0

हाँ वही त्रुटि। –

+0

डेटटाइम में केवल 23 घंटे 24 नहीं हैं। –

उत्तर

1

hh 12 घंटे, HH 24 घंटे है। हालांकि, यह रेंज 0-23, में होना चाहिए नहीं 24. आप आसानी से बदल नहीं सकते तो कैसे उन तिथि तार उत्पन्न कर रहे हैं, आप इसे मैन्युअल पार्स कर सकते हैं:

string dateTimeStr = "05SEP1998 2400"; 

var provider = CultureInfo.InvariantCulture; 

const string Format = "ddMMMyyyy HHmm"; 
int HourPos = Format.IndexOf("HH"); 
var hour = dateTimeStr.Substring(HourPos, 2); 
bool addDay = hour == "24"; 
if (addDay) 
    dateTimeStr = dateTimeStr.Substring(0, HourPos) + "00" + dateTimeStr.Substring(HourPos + 2); 
var dateTime = DateTime.ParseExact(dateTimeStr, Format, provider); 
if (addDay) 
    dateTime += TimeSpan.FromHours(24); 

ध्यान रहे कि यदि dateTimeStr अपवाद फेंक होगा पात्रों की सही संख्या नहीं है। आप इसे बेहतर तरीके से संभालना चाहते हैं।

+0

मुझे आपका दृष्टिकोण गलत लगता है। क्यूं कर? क्योंकि इस कोड में उदाहरण के लिए "05SEP1998 2400" 'आप मानते हैं कि 24 सितंबर का 24 वां घंटा है। लेकिन वास्तव में यह 6 वें सितंबर का 0 वां घंटा है। इसलिए वास्तविकता" 06SEP1998 0000 "' –

+0

है इसलिए मेरे पास डेटटाइम + = टाइमस्पेन। फ्रॉमहोर्स (24); '। उदाहरण दिनांक '9/6/1998 12:00:00 पूर्वाह्न (या' 06SEP1998 0000') तक हल हो जाता है। –

+0

ठीक है। अब यह स्पष्ट है। –

0

दिन में 24 घंटे हैं। लेकिन लिखते समय हम इसे 0-23 से कहते हैं। यह घंटों के प्रारूप पर अपवाद दे रहा है।

मुझे कैसे पता चला?

मैं की तरह

DateTime dt = new DateTime(1998, 9, 5, 24, 0, 0); 

अपने स्ट्रिंग से एक DateTime वस्तु बनाने की कोशिश की यह घंटे पर त्रुटि दे दी है कि इस कोड के लिए अपने अंत में Hour. minute and second parameters descrive an un-representable DateTime

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