DateTime.TryParse all possible type of dates
I want to check if a date has a correct format. There is many possibilities of correct dates like:
- 02.08.2010
- 2.8.2010
- 02.8.2010 02.08
- 02.August
- ...
I can test each on with code like this:
if (DateTime.TryParse(DateTime.ParseExact(date, 开发者_JAVA技巧"dd.M.",
new CultureInfo("sl-SI")).ToString(), out dt))
But then I can have 40 if statements. Is it possible to check all dates with one if statement or one loop?
Update:
Based on the answers so far, I am testing this code, but I have one more problem. What if I have just 9.2 not 9.2.2010 then this code will not work:
CultureInfo ci = CultureInfo.GetCultureInfo("sl-SI");
string[] fmts = ci.DateTimeFormat.GetAllDateTimePatterns();
if (DateTime.TryParseExact(date, fmts, ci, DateTimeStyles.AssumeLocal, out dt))
{
DateTime = Convert.ToDateTime(date);
Check = true;
}
Must I manually add this times or what can I do?
You can use something like the following, but be aware that more than one format might be able to parse the same date. For example 10/11/12 can be parsed as yy/MM/dd or MM/dd/yy, which are both valid US date formats. MM/dd/yy is more common, so it appears first in the list and is the one returned by the code below (if you use it with a US culture instead of the culture in the example).
string testValue = "10.11.12";
DateTime result;
CultureInfo ci = CultureInfo.GetCultureInfo("sl-SI");
string[] fmts = ci.DateTimeFormat.GetAllDateTimePatterns();
Console.WriteLine(String.Join("\r\n", fmts));
if (DateTime.TryParseExact(testValue, fmts, ci,
DateTimeStyles.AssumeLocal, out result))
{
Console.WriteLine(result.ToLongDateString());
}
Yes ParseExact can take a list of formats to check against.
var formats = new[] { "M.d.yyyy", "dd.MM.yyyy" };
var dateValue = DateTime.ParseExact(
dateString, formats, new CultureInfo("sl-SI"), DateTimeStyles.None);
You can actually try all date formats in every possible pattern, then use ParseExact to format the value you want
public string GetDateFormat(string input)
{
string[] formats = {"M/d/yyyy", "MM/dd/yyyy",
"d/M/yyyy", "dd/MM/yyyy",
"yyyy/M/d", "yyyy/MM/dd",
"M-d-yyyy", "MM-dd-yyyy",
"d-M-yyyy", "dd-MM-yyyy",
"yyyy-M-d", "yyyy-MM-dd",
"M.d.yyyy", "MM.dd.yyyy",
"d.M.yyyy", "dd.MM.yyyy",
"yyyy.M.d", "yyyy.MM.dd",
"M,d,yyyy", "MM,dd,yyyy",
"d,M,yyyy", "dd,MM,yyyy",
"yyyy,M,d", "yyyy,MM,dd",
"M d yyyy", "MM dd yyyy",
"d M yyyy", "dd MM yyyy",
"yyyy M d", "yyyy MM dd",
"d-MMM-yyyy", "d/MMM/yyyy", "d MMM yyyy", "d.MMM.yyyy",
"d-MMM-y", "d/MMM/y", "d MMM y", "d.MMM.y",
"dd-MMM-yyyy", "dd/MMM/yyyy", "dd MMM yyyy", "dd.MMM.yyyy",
"MMM/dd/yyyy", "MMM-dd-yyyy", "MMM dd yyyy", "MMM.dd.yyyy", "MMM.dd.yyyy"
};
DateTime dateValue;
foreach (string dateStringFormat in formats)
{
if (DateTime.TryParseExact(input, dateStringFormat,
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out dateValue))
{
Console.WriteLine(dateStringFormat);
return dateStringFormat;
}
}
return null;
}
精彩评论