using System.Collections.Generic;
using System.Globalization;
using System.Text.RegularExpressions;
public static void Main()
string[] dates = { "2000-01-01" };
foreach (var date in dates)
string dateSlash = date.Replace(@"-", @"/");
string dateDot = date.Replace(@"-", @".");
Console.WriteLine("in=" + date);
StandardizeDate(date + " 12:00");
StandardizeDate(date + " 12:01:02");
StandardizeDate(date + " 12:03:04.555");
StandardizeDate(date + " 12:05:06.999-0100");
StandardizeDate(date + " 12:07:09.333+01:00");
private static string StandardizeDate(string indate)
string indate2 = Regex.Replace(indate, @"\s+", " ").ToLower();
@"(\d{4})\s*[\/\-\.]\s*(\d{1,2})\s*[\/\-\.]\s*(\d{1,2})\s*" +
@"|^(\d{1,2}[\/\-\.]\d{1,2}[\/\-\.]\d{4}\s*)" +
@"|^(\d{1,2}[\/\-\.]\d{1,2}[\/\-\.]\d{2}\s*)" +
@"|((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-zA-Z]*\s*\d{1,2}\s*,?\s*\d{2}(\d{2})?)" +
@"|(\d{1,2}\s+(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-zA-Z]*,?\s*\d{2}(\d{2})?)" +
@"\s*[Tt]?\s*(\d{2})\s*:\s*(\d{2})\s*:\s*(\d{2})\s*\.\s*(\d{1,3})\s*?[Zz]?" +
@"|\s*[Tt]?\s*(\d{2})\s*:\s*(\d{2})\s*:\s*(\d{2})\s*[Zz]?" +
@"|\s*[Tt]?\s*(\d{2})\s*:\s*(\d{2})\s*[Zz]?" +
@"([\s*]?[+-]\d{2}:?\d{2})?" +
@")", RegexOptions.IgnoreCase); ;
Match match = re.Match(indate2);
Console.WriteLine("raw match = " + mv);
string[] formats = { "yyyy-MM-dd HH:mm:ss.fffzzz", "yyyy-MM-dd HH:mm:ss.fff zzz", "yyyy-MM-dd HH:mm:ss.fff", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM-dd", "MM-dd-yy HH:mm:ss.fff", "MM-dd-yy HH:mm:ss", "MM-dd-yy HH:mm", "MM-dd-yy", "M-d-yy HH:mm:ss.fff", "M-d-yy HH:mm:ss", "M-d-yy HH:mm", "M-d-yy", "MM-d-yy HH:mm:ss.fff", "MM-d-yy HH:mm:ss", "MM-d-yy HH:mm", "MM-d-yy", "M-dd-yy HH:mm:ss.fff", "M-dd-yy HH:mm:ss", "M-dd-yy HH:mm", "M-dd-yy", "MM-dd-yyyy HH:mm:ss.fff", "MM-dd-yyyy HH:mm:ss", "MM-dd-yyyy HH:mm", "MM-dd-yyyy", "M-d-yyyy HH:mm:ss.fff", "M-d-yyyy HH:mm:ss", "M-d-yyyy HH:mm", "M-d-yyyy", "MM-d-yyyy HH:mm:ss.fff", "MM-d-yyyy HH:mm:ss", "MM-d-yyyy HH:mm", "MM-d-yyyy", "M-dd-yyyy HH:mm:ss.fff", "M-dd-yyyy HH:mm:ss", "M-dd-yyyy HH:mm", "M-dd-yyyy", "MMM dd yyyy HH:mm:ss.fff", "MMM dd yyyy HH:mm:ss", "MMM dd yyyy HH:mm", "MMM d yyyy", "MMM dd yy HH:mm:ss.fff", "MMM dd yy HH:mm:ss", "MMM dd yy HH:mm", "MMM dd yy", "MMMM dd yyyy HH:mm:ss.fff", "MMMM dd yyyy HH:mm:ss", "MMMM dd yyyy HH:mm", "MMMM dd yyyy", "MMMM dd yy HH:mm:ss.fff", "MMMM dd yy HH:mm:ss", "MMMM dd yy HH:mm", "MMMM dd yy", "MMM d yyyy HH:mm:ss.fff", "MMM d yyyy HH:mm:ss", "MMM d yyyy HH:mm", "MMM d yyyy", "MMM d yy HH:mm:ss.fff", "MMM d yy HH:mm:ss", "MMM d yy HH:mm", "MMM d yy", "MMMM d yyyy HH:mm:ss.fff", "MMMM d yyyy HH:mm:ss", "MMMM d yyyy HH:mm", "MMMM d yyyy", "MMMM d yy HH:mm:ss.fff", "MMMM d yy HH:mm:ss", "MMMM d yy HH:mm", "MMMM d yy", "d MMMM yy HH:mm:ss.fff", "d MMMM yy HH:mm:ss", "d MMMM yy HH:mm", "d MMMM yy", "d MMMM yyyy HH:mm:ss.fff", "d MMMM yyyy HH:mm:ss", "d MMMM yyyy HH:mm", "d MMMM yyyy", "dd MMMM yy HH:mm:ss.fff", "dd MMMM yy HH:mm:ss", "dd MMMM yy HH:mm", "dd MMMM yy", "dd MMMM yyyy HH:mm:ss.fff", "dd MMMM yyyy HH:mm:ss", "dd MMMM yyyy HH:mm", "dd MMMM yyyy", "d MMM yy HH:mm:ss.fff", "d MMM yy HH:mm:ss", "d MMM yy HH:mm", "d MMM yy", "d MMM yyyy HH:mm:ss.fff", "d MMM yyyy HH:mm:ss", "d MMM yyyy HH:mm", "d MMM yyyy", "dd MMM yy HH:mm:ss.fff", "dd MMM yy HH:mm:ss", "dd MMM yy HH:mm", "dd MMM yy", "dd MMM yyyy HH:mm:ss.fff", "dd MMM yyyy HH:mm:ss", "dd MMM yyyy HH:mm", "dd MMM yyyy" };
if (DateTime.TryParseExact(mv, formats, null, DateTimeStyles.None, out var d))
Console.WriteLine(" DATE FORMAT FOUND=" + d.ToString());
Console.WriteLine(" FAIL!");
Console.WriteLine(" pre-standardize=" + mv);
string converted = Convert.ToDateTime(mv).ToString("yyyy-MM-dd HH:mm:ss.fff");
Console.WriteLine(" converted=" + converted);
Console.WriteLine("Exception in StandardizeDate: " + ex.Message);
int numspaces2 = 50 - "1966-03-31T18:36:13Z".Length;
return "1966-03-31T18:36:13Z";