आपको ParseExact
विधि का उपयोग करने की आवश्यकता है । यह अपने दूसरे तर्क के रूप में एक स्ट्रिंग लेता है जो उस प्रारूप को निर्दिष्ट करता है जो डेटाइम में है, उदाहरण के लिए:
dateString = "2011-29-01 12:00 am";
format = "yyyy-dd-MM h:mm tt";
try
{
result = DateTime.ParseExact(dateString, format, provider);
Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
}
catch (FormatException)
{
Console.WriteLine("{0} is not in the correct format.", dateString);
}
यदि उपयोगकर्ता UI में एक प्रारूप निर्दिष्ट कर सकता है, तो आपको उस स्ट्रिंग में अनुवाद करने की आवश्यकता है जिसे आप इस विधि में पारित कर सकते हैं। आप ऐसा कर सकते हैं या तो उपयोगकर्ता को सीधे प्रारूप स्ट्रिंग में प्रवेश करने की अनुमति दें - हालांकि इसका मतलब यह है कि रूपांतरण विफल होने की संभावना है क्योंकि वे एक अमान्य प्रारूप स्ट्रिंग में प्रवेश करेंगे - या एक कॉम्बो बॉक्स होगा जो उन्हें संभावित विकल्पों के साथ प्रस्तुत करता है और आप इन विकल्पों के लिए प्रारूप स्ट्रिंग सेट करें।
यदि यह संभावना है कि इनपुट गलत होगा (उदाहरण के लिए उपयोगकर्ता इनपुट) तो TryParseExact
त्रुटि के मामले को संभालने के लिए उपयोग अपवादों के बजाय इसका उपयोग करना बेहतर होगा :
dateString = "2011-29-01 12:00 am";
format = "yyyy-dd-MM h:mm tt";
DateTime result;
if (DateTime.TryParseExact(dateString, format, provider, DateTimeStyles.None, out result))
{
Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
}
else
{
Console.WriteLine("{0} is not in the correct format.", dateString);
}
एक बेहतर विकल्प हो सकता है कि उपयोगकर्ता को दिनांक प्रारूपों के विकल्प के साथ प्रस्तुत न करें, लेकिन ओवरलोड का उपयोग करें जो स्वरूपों की एक सरणी लेता है :
string[] formats= {"M/d/yyyy h:mm:ss tt", "M/d/yyyy h:mm tt",
"MM/dd/yyyy hh:mm:ss", "M/d/yyyy h:mm:ss",
"M/d/yyyy hh:mm tt", "M/d/yyyy hh tt",
"M/d/yyyy h:mm", "M/d/yyyy h:mm",
"MM/dd/yyyy hh:mm", "M/dd/yyyy hh:mm",
"MM/d/yyyy HH:mm:ss.ffffff" };
string dateString;
try
{
dateValue = DateTime.ParseExact(dateString, formats,
new CultureInfo("en-US"),
DateTimeStyles.None);
Console.WriteLine("Converted '{0}' to {1}.", dateString, dateValue);
}
catch (FormatException)
{
Console.WriteLine("Unable to convert '{0}' to a date.", dateString);
}
यदि आप किसी कॉन्फ़िगरेशन फ़ाइल या डेटाबेस से संभावित प्रारूपों को पढ़ते हैं तो आप इनको जोड़ सकते हैं क्योंकि आप उन सभी अलग-अलग तरीकों से सामना करते हैं जिनसे लोग तारीखें दर्ज करना चाहते हैं।
TryParse
। यही कारण हैbool success = DateTime.TryParse(...);
।