मेरे पास कोड का एक टुकड़ा है जो मेरे परीक्षण सर्वर पर दुर्घटनाग्रस्त हो जाता है, न कि मेरे विकास सर्वर पर। मेरे पास देव और परीक्षण के लिए 2 Windows 2012R2 सर्वर हैं। दोनों समान पैच स्तर पर, समान .NET Framework संस्करण। दोनों में मौजूदा उपयोगकर्ताओं और सिस्टम लोकल के लिए समान क्षेत्रीय सेटिंग्स (डच) हैं। इस डच सेटिंग में - दिनांक सेपरेटर के रूप में है। निम्नलिखित कोड स्निपेट देव सर्वर पर काम करता है लेकिन परीक्षण सर्वर पर क्रैश हो जाता है। मैंने कंसोल ऐप में कोड की 2 पंक्तियों के साथ स्निपेट जोड़ा और फिर मैं त्रुटि को पुन: उत्पन्न कर सकता हूं।

कोड का टुकड़ा (डेमो कंसोल ऐप के लिए सरलीकृत) है:

        string date = "28/02/2017";
        DateTime dateDate = DateTime.ParseExact(date, "dd/MM/yyyy", null);

तो यह मेरे देव सर्वर पर काम करता है और परीक्षण पर दुर्घटनाग्रस्त हो जाता है मुझे यह अपवाद मिलता है

Unhandled Exception: System.FormatException: String was not recognized as a vali
d DateTime.
   at System.DateTimeParse.ParseExact(String s, String format, DateTimeFormatInf
o dtfi, DateTimeStyles style)
   at System.DateTime.ParseExact(String s, String format, IFormatProvider provid
er)

जब मैं कोड को में बदलता हूं

        string date = "28/02/2017";
        DateTime dateDate = DateTime.ParseExact(date, "dd/MM/yyyy", CultureInfo.InvariantCulture);

यह दोनों सर्वरों पर काम करता है। जब मैं कंसोल ऐप में CurrentCultu और CurrentUiCulture आउटपुट करता हूं तो वे दोनों सर्वरों पर समान होते हैं।

कोई विचार मेरे परीक्षण सर्वर पर क्या गलत हो सकता है? जब मैं ParseExact विधि में शून्य पास करता हूं तो मैं उम्मीद करता हूं कि कोड मेरे देव सर्वर पर भी क्रैश हो जाएगा क्योंकि CurrentCulture का उपयोग किया जाना चाहिए और फिर दिनांक सेपरेटर/एक त्रुटि का कारण बनना चाहिए।

सादर डैनी

2
Danny 10 मार्च 2017, 15:00

2 जवाब

सबसे बढ़िया उत्तर

null निर्दिष्ट करता है कि आप CultureInfo.InvariantCulture पास करने के बजाय वर्तमान-संस्कृति का उपयोग करना चाहते हैं।

MSDN:

यदि प्रदाता null है, तो CultureInfo वस्तु जो से मेल खाती है वर्तमान संस्कृति का प्रयोग किया जाता है।

डेटाटाइम्स को पार्स करने में / का एक विशेष अर्थ है। उन्हें वर्तमान संस्कृति के DateSeparator से बदल दिया जाएगा। ("/" कस्टम प्रारूप विनिर्देशक)

आप उन्हें मास्क भी कर सकते हैं:

DateTime dateDate = DateTime.ParseExact(date, "dd'/'MM'/'yyyy", null);
2
Tim Schmelter 10 मार्च 2017, 15:15

/ वर्णों का शाब्दिक अर्थ दिनांक स्वरूप स्ट्रिंग में नहीं है। इसे प्रयुक्त प्रारूप प्रदाता के अनुसार दिनांक विभाजक के साथ प्रतिस्थापित किया जाता है।

प्रारूप स्ट्रिंग में इसे शाब्दिक वर्ण बनाने के लिए आपको / सिंगल कोट्स में संलग्न करने की आवश्यकता है:

"dd'/'MM'/'yyyy"
1
Dmitry Egorov 10 मार्च 2017, 15:05