C# 如何在C中验证日期格式#
我想检查给定字符串是否为有效的.net日期格式 因此,我有下面的函数来检查日期格式是否正确C# 如何在C中验证日期格式#,c#,.net,C#,.net,我想检查给定字符串是否为有效的.net日期格式 因此,我有下面的函数来检查日期格式是否正确 public void IsValidDateFormat(string dateFormat) { var flag = true; try { DateTime.ParseExact(DateTime.Now.ToString(), dateFormat,
public void IsValidDateFormat(string dateFormat)
{
var flag = true;
try
{
DateTime.ParseExact(DateTime.Now.ToString(),
dateFormat,
System.Globalization.CultureInfo.InvariantCulture);
}
catch (Exception ex)
{
flag = false;
}
return flag;
}
但是,该方法没有按预期工作。对于有效的日期格式,它也返回false
dateFormat=,
=>返回false=>PasseddateFormat=someinvalidformat
=>返回false=>PasseddateFormat=MM/dd/yyyy
=>返回false=>未传递
因此MM/dd/yyyy
是有效的日期格式。但方法返回false
是否有更好的方法检查给定的日期格式是否为有效的.Net日期格式
更新1我理解为什么方法对于
MM/dd/yyyy
或其他有效的日期格式失败。我不是问它为什么失败MM/dd/yyyy
就是我在这里使用的常见有效日期时间格式。我正在寻找一种方法来检查给定的日期格式是否为有效的.Net日期格式。所以它可以是任何.Net日期格式。为什么不
TryParse()
或确切版本
如果系统可以解析,则返回true
它与您的方法“相同”。因为
DateTime.ToString
返回的格式与您的格式(包括时间部分)不匹配,ParseExact
失败
改为使用公共字符串ToString(字符串格式,System.IFormatProvider提供程序)
验证格式
public bool IsValidDateFormat(string dateFormat)
{
try {
string s = DateTime.Now.ToString(dateFormat, CultureInfo.InvariantCulture);
DateTime.Parse(s, CultureInfo.InvariantCulture);
return true;
} catch {
return false;
}
}
请注意,看起来无效的日期/时间格式实际上可能有效,因为一些非格式字符只是按原样输出。例如
DateTime.Now.ToString("abcdefg", CultureInfo.InvariantCulture)
结果显示为“abc27e6A.D.”。因此,它实际上是一种有效的日期/时间格式,即使它没有多大意义。您可以通过尝试解析生成的日期字符串来提高测试的质量。这将消除许多无意义的格式
这个测试
Console.WriteLine(IsValidDateFormat(",,"));
Console.WriteLine(IsValidDateFormat("a"));
Console.WriteLine(IsValidDateFormat("MM/dd/yyyy hh:mm:ss"));
Console.WriteLine(IsValidDateFormat("MM/dd/yyyy"));
Console.WriteLine(IsValidDateFormat("abcdefg"));
Console.ReadKey();
。。。印刷品
假假
正确
正确
假的
DateTime.Now.ToString()
返回MM/dd/yyyy H:MM:ss tt
。使用MM/dd/yyyy
尝试ParseExact
将失败,因为字符串不是那种格式。我知道它失败的原因。我正在寻找一种验证日期格式的方法,使用ToSortDateString()
而不是ToString()
。这仍然会导致您的MM/dd/yyyy
格式在10月份之前的几个月内失败。请使用DateTime.Now.toSortDateString()
然后仍然不清楚有效的格式字符串是什么意思。从技术上讲,“MM yyyy MM yyyy H tt z”
是有效的格式字符串。“123123”
也是如此。它可能没有意义,但它是有效的。TryParse
不采用格式。我不是在确认日期。我想验证dateFormat这会引发dateFormat“a”的异常@Matt.G,是的,你是对的。显然,TryPareExact
在格式本身无效时抛出。我改变了答案。