Search code examples
c#.netdatetimedata-cleaningdate-formatting

What is the longest string that would convert to a valid DateTime?


I am writing a data parser and trying to work out if a field is a number, a date, a string etc.

The .NET DateTime.TryParse is understandably slow when checking many records (as it checks many different date formats). Therefore, I want to shortcut the processing if possible. A simple check I can do initially is look at the length of the string and reject it if it falls outside of some bounds.

The shortest date I think I should reasonably expect is 6 characters long (e.g. d/M/yy) so I can make the following check:

if (fieldValue.Length < 6)
{
    // no datetime is shorter than 6 chars (e.g. d/M/yy is the shotest I can think of)
    return false;
}

What is the longest string that still represents a parse-able DateTime?

(For example, "Wednesday, 30th September 2020 12:34:56" is pretty long but I bet there are longer examples!)

A few points:

  • I am not looking for tricksy answers where the date is padded out with white space or something like that.
  • I am focused on English dates initially but would be interested if other cultures can throw up longer examples.

Solution

  • What is the longest string that still represents a parse-able DateTime?

    Take a look at the list of custom format specifiers for a DateTime, and take all of those into account.

    For instance, this:

    DateTime dt = DateTime.Now;
    string strNow = dt.ToString("dddd, MMMM dd, yyyy gg hh:mm:ss.fffffff tt K");
    Console.WriteLine(strNow);
    

    Gives:

    Tuesday, June 16, 2020 A.D. 08:47:02.2667911 AM -06:00
    

    But those different types of values can be output differently based on the information in the DateTime. Look CLOSELY at all the different possible outputs for each specifier in the documentation to see what I mean.