Parsing a Date Like "Wednesday 13th January 2010" with .NET

c#, datetime

Solution

What about strip them?

string value = "Wednesday 13th January 2010";
DateTime dt;
DateTime.TryParseExact(
    Regex.Replace(value, @"(\w+ \d+)\w+ (\w+ \d+)", "$1 $2"),
    "dddd d MMMM yyyy", 
    DateTimeFormatInfo.InvariantInfo, 
    DateTimeStyles.None, out dt);

Problem

How can I convert the following strings to a System.DateTime object? Wednesday 13th January 2010 Thursday 21st January 2010 Wednesday 3rd February 2010 Normally something like the following would do it ``` DateTime dt; DateTime.TryParseExact(value, "dddd d MMMM yyyy", DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out dt); ``` but this doesn't work because of the 'th', 'st' or 'rd' in the string Update It appears that DateTime doesn't support formatting the 'th', 'st', 'rd' etc so they need to be stripped before parsing. Rubens Farias provides a nice regular expression below.

Original source