c# - How to remove DateTime.Parse dependency on System.Threading.Thread.CurrentThread.CurrentCulture -


पर विचार करें निम्नलिखित कोड:

  वर्ग कार्यक्रम {static void मुख्य (स्ट्रिंग [] args ) {Try {System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo ("Fo-FO"); Var s = DateTime.MaxValue.ToString ("yyyy-MM-ddTHH: मिमी: ssZ"); Var d = DateTime.Parse (s, CultureInfo.InvariantCulture); कंसोल। WrightLine ("एफओ-एफओ के साथ पार्स करने में सक्षम था"); } पकड़ (अपवाद ई) {Console.WriteLine ("अपवाद: {0}", ई); } {System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo ("en-US") का प्रयास करें; Var s = DateTime.MaxValue.ToString ("yyyy-MM-ddTHH: मिमी: ssZ"); Var d = DateTime.Parse (s, CultureInfo.InvariantCulture); कंसोल.प्रकाशलाइन ("एन-यूएस के साथ पार्स करने में सक्षम था"); } पकड़ (अपवाद ई) {Console.WriteLine ("अपवाद: {0}", ई); }}}  

आउटपुट है:

  अपवाद: System.FormatException: स्ट्रिंग को मान्य दिनांकटाइम के रूप में पहचाना नहीं गया था। DateTimeTest2.Program.Main पर System.DateTime.Parse पर System.DateTimeParse.Parse (स्ट्रिंग है, DateTimeFormatInfo dtfi, DateTimeStyles शैलियों) (स्ट्रिंग है, IFormatProvider प्रदाता) (String [] args) सी में पर: \ परियोजनाओं \ DateTimeTest2 \ DateTimeTest2 \ Program.cs: लाइन 17 के साथ पार्स करने में सक्षम था en-US  

यह कोड टुकड़ा है कि DateTime.Parse Thread.CurrentThread.CurrentCulture परवाह किए बिना उपयोग करता तथ्य यह है कि "InvariantCulture" है की साबित होता है में पारित किया जा रहा। मैं यह इतना unintuitive कि मैं इसे एक "बग" करने पर विचार करें।

क्यों हम अगर यह किसी भी मामले में DateTime.Parse द्वारा नजरअंदाज कर दिया वास्तव में एक CultureInfo में पारित करने के लिए है? वहाँ एक रास्ता CurrentCulture से स्वतंत्र है कि में DateTime.Parse बुलाने की कोई तरीका है?

यह कोड टुकड़ा साबित करता है कि DateTime.Parse Thread.CurrentThread.CurrentCulture परवाह किए बिना उपयोग करता तथ्य यह है कि "InvariantCulture"

मुझे यकीन है कि कैसे इस उदाहरण है कि साबित होता है नहीं कर रहा हूँ। तार DateTime.Parse से अलग हो गए हैं, इसलिए यह पूरी तरह से आश्चर्यजनक नहीं है कि विभिन्न परिणाम सामने आते हैं।

पहली स्ट्रिंग में समय के रूप में स्वरूपित है 23.59.59 , जो (जाहिरा तौर पर) आविष्कारशील संस्कृति पार्स नहीं कर सकता; दूसरी स्ट्रिंग में 23:59:59 के रूप में स्वरूपित समय है, जो InvariantCulture सकते पार्स क्या समस्या है?

संपादित करें जोड़ने के लिए, क्योंकि जाहिरा तौर पर यह एक फर्क पड़ता है, मैं .NET 2.0 के साथ चल रहा हूं और fo-FO और एन-यूएस क्रमशः हैं

  9999-12-31T23.59.59Z  

और

  99 99-12-31 T23: 59: 59Z  

Comments

Popular posts from this blog

c# - sqlDecimal to decimal clr stored procedure Unable to cast object of type 'System.Data.SqlTypes.SqlDecimal' to type 'System.IConvertible' -

Calling GetGUIThreadInfo from Outlook VBA -

Obfuscating Python code? -