tags:

views:

2146

answers:

6

I'm reading text from a flat file in c# and need to test whether certain values are dates. They could be in either YYYYMMDD format or MM/DD/YY format. What is the simplest way to do this in .Net?

+3  A: 

DateTime.TryParse method

Steven A. Lowe
Since I can't edit your answer, I thought it might help to provide a link to the MSDN article for that method. http://msdn.microsoft.com/en-us/library/ch92fbc1.aspx
Yadyn
[@Yadyn]: i figured the intellisense would be enough, but ok i added the link to be thorough - thanks!
Steven A. Lowe
+20  A: 
string[] formats = {"yyyyMMdd", "MM/dd/yy"};
var Result = DateTime.ParseExact(input, formats, CultureInfo.CurrentCulture, DateTimeStyles.None);

or

DateTime result;
string[] formats = {"yyyyMMdd", "MM/dd/yy"};
DateTime.TryParseExact(input, formats, CultureInfo.CurrentCulture, DateTimeStyles.None, out result);

More info in the MSDN documentation on ParseExact and TryParseExact.

pb
This is better than mine. Didn't know you could do a string array for formats. Very nice!
John Sheehan
Even better! Just what I needed.
JoshL
Make sure you check the return value of DateTime.TryParseExact(...) as that will be the only way you can tell if it succeeded or not.
Aydsman
A: 

You can also do Convert.ToDateTime

not sure the advantages of either

Sara Chipps
A: 

Using TryParse will not throw an exception if it fails. Also, TryParse will return True/False, indicating the success of the conversion.

Regards...

Josh Stodola
+2  A: 

you could try also TryParseExact for set exact format. method, here's documentation: http://msdn.microsoft.com/en-us/library/ms131044.aspx

e.g.

DateTime outDt;
bool blnYYYMMDD = 
     DateTime.TryParseExact(yourString,"yyyyMMdd"
                            ,CultureInfo.CurrentCulture,DateTimeStyles.None
                            , out outDt);

I hope i help you.

stefano m
Dude! That is so useful, I lost nearly an hour over this, even though I know I've done it before somewhere.
Chris Needham
A: 

You can use the TryParse method to check validity and parse at same time.

DateTime output;
string input = "09/23/2008";
if (DateTime.TryParseExact(input,"MM/dd/yy", DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out output) || DateTime.TryParseExact(input,"yyyyMMdd", DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out output))
{
    //handle valid date
}
else
{
    //handle invalid date
}
Skippy