using System.Collections.Generic;
using System.Globalization;
using System.Collections;
public static void Main()
string[] datesToTest = { "23.05", "05.23", "23.5", "5.23", "abr2005", "apr2005", "1800", "2239", "2007", "2021", "052016", "122019", "23122022", "2017", "10122022", "20__", "23122019"
, "29122022", "21122022", "20122012", "20122011", "20/12/2011", "20-12-2011", "12/2019", "12-2019"
, "Dezembro2019", "Dezembro/2001", "04 de Dezembro de 2001", "06Dezembro2001", "06Dez2001", "06Dec2001"};
DateTime dateToTest = DateTime.MinValue;
Console.WriteLine($"################################################ Dates ################################################");
CultureInfo culture = CultureInfo.CurrentCulture;
Console.WriteLine($"The current culture DisplayName is {culture.DisplayName}");
Console.WriteLine($"The current culture NativeName is {culture.NativeName}");
Console.WriteLine($"The current culture IsNeutralCulture? {culture.IsNeutralCulture}");
Console.WriteLine($"________________________________________________________________________________________________________");
TestOrderAndReport(datesToTest, culture);
Console.WriteLine($"################################################ Dates ################################################");
culture = new CultureInfo("en-US");
Console.WriteLine($"The current culture DisplayName is {culture.DisplayName}");
Console.WriteLine($"The current culture NativeName is {culture.NativeName}");
Console.WriteLine($"The current culture IsNeutralCulture? {culture.IsNeutralCulture}");
Console.WriteLine($"________________________________________________________________________________________________________");
TestOrderAndReport(datesToTest, culture);
Console.WriteLine($"################################################ Dates ################################################");
culture = new CultureInfo("pt-BR");
Console.WriteLine($"After setting, CultureInfo is {culture.Name.ToString()}");
Console.WriteLine($"After setting, CultureInfo DisplayName is {culture.DisplayName}");
Console.WriteLine($"After setting, CultureInfo NativeName is {culture.NativeName}");
Console.WriteLine($"The current culture IsNeutralCulture? {culture.IsNeutralCulture}");
CultureInfo.CurrentCulture = culture;
Console.WriteLine($"________________________________________________________________________________________________________");
TestOrderAndReport(datesToTest, culture);
internal static void TestOrderAndReport(string[] datesToTest, CultureInfo culture)
DateTime dateToTest = DateTime.MinValue;
var orderedDates = new List<(DateTime date, string rawDate)>();
foreach (var date in datesToTest)
var isDate = DateTryParseExact(date, out dateToTest, culture);
orderedDates.Add((dateToTest, date));
Console.WriteLine($"######################################## na cultura {culture.DisplayName}: ########################################");
foreach (var (date, rawDate) in orderedDates)
Console.WriteLine($"------------------------------------------------------------------------");
var isDate = date != DateTime.MinValue;
Console.WriteLine(@$"{rawDate, 25} é data? {isDate}{(isDate ? ": " + date.ToString() : "")}");
internal static bool DateTryParseExact(string dateWithoutSpace, out DateTime testDate, CultureInfo cultureInfo)
return DateTime.TryParse(dateWithoutSpace, cultureInfo, DateTimeStyles.None, out testDate) ||
DateTime.TryParseExact(dateWithoutSpace, "yyyy", cultureInfo, DateTimeStyles.AssumeLocal, out testDate) ||
DateTime.TryParseExact(dateWithoutSpace, "MMMyyyy", cultureInfo, DateTimeStyles.AssumeLocal, out testDate) ||
DateTime.TryParseExact(dateWithoutSpace, "ddMMyyyy", cultureInfo, DateTimeStyles.AssumeLocal, out testDate) ||
DateTime.TryParseExact(dateWithoutSpace, "MMMyyyy", cultureInfo, DateTimeStyles.AssumeLocal, out testDate) ||
DateTime.TryParseExact(dateWithoutSpace, "MM/yyyy", cultureInfo, DateTimeStyles.AssumeLocal, out testDate) ||
DateTime.TryParseExact(dateWithoutSpace, "dd/MM/yyyy", cultureInfo, DateTimeStyles.AssumeLocal, out testDate) ||
DateTime.TryParseExact(dateWithoutSpace, "MM-yyyy", cultureInfo, DateTimeStyles.AssumeLocal, out testDate) ||
DateTime.TryParseExact(dateWithoutSpace, "MM.d", cultureInfo, DateTimeStyles.AssumeLocal, out testDate) ||
DateTime.TryParseExact(dateWithoutSpace, "d.MM", cultureInfo, DateTimeStyles.AssumeLocal, out testDate) ||
DateTime.TryParseExact(dateWithoutSpace, "MM.dd", cultureInfo, DateTimeStyles.AssumeLocal, out testDate) ||
DateTime.TryParseExact(dateWithoutSpace, "dd.MM", cultureInfo, DateTimeStyles.AssumeLocal, out testDate) ||
DateTime.TryParseExact(dateWithoutSpace, "MMMyyyy", cultureInfo, DateTimeStyles.AssumeLocal, out testDate);