[英]How to validate date format in C#
我想检查给定的字符串是否为有效的.net日期格式。
所以我有以下功能检查日期格式是否正确
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 =>通过
dateFormat = someinvalidformat
=>返回false =>通过
dateFormat = MM/dd/yyyy
=>返回false =>未通过
因此MM/dd/yyyy
是有效的dateformat。 但是方法返回false。
有没有更好的方法来检查给定的日期格式是否为有效的.Net日期格式?
更新1
我了解为什么方法对于MM/dd/yyyy
或其他有效日期格式失败。 我不是问为什么失败了。 MM/dd/yyyy
只是我在这里使用的常见有效日期时间格式。
我正在寻找一种检查给定日期格式是否为有效的.Net日期格式的方法。 因此它可以是任何.Net日期格式。
由于DateTime.ToString
返回的格式与您的格式不匹配(包括时间部分),因此ParseExact
失败。
通过使用public string ToString(string format, System.IFormatProvider provider)
来验证格式
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();
...打印
假
假
真正
真正
假
为什么不使用TryParse()
或确切版本? https://docs.microsoft.com/es-es/dotnet/api/system.datetime.tryparse?view=netframework-4.8
如果系统可以解析,则返回true。
它与您的方法“相同”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.