我想检查日期是否格式正确。正确日期的可能性很多,如:
我可以使用以下代码测试每个代码:
if (DateTime.TryParse(DateTime.ParseExact(date, "dd.M.",
new CultureInfo("sl-SI")).ToString(), out dt))
但是我可以有40个if语句。是否可以使用一个if语句或一个循环检查所有日期?
更新
根据目前为止的答案,我正在测试此代码,但我还有一个问题。如果我只有9.2而不是9.2.2010那么这段代码将不起作用:
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;
}
我必须手动添加这些时间或我该怎么办?
答案 0 :(得分:9)
是ParseExact可以列出要检查的格式列表。
var formats = new[] { "M.d.yyyy", "dd.MM.yyyy" };
var dateValue = DateTime.ParseExact(
dateString, formats, new CultureInfo("sl-SI"), DateTimeStyles.None);
答案 1 :(得分:8)
您可以使用以下内容,但请注意,多个格式可能能够解析相同的日期。例如,10/11/12可以解析为yy / MM / dd或MM / dd / yy,它们都是有效的美国日期格式。 MM / dd / yy更常见,因此它首先出现在列表中,并且是下面代码返回的代码(如果您将其与美国文化一起使用而不是示例中的文化)。
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());
}