C# 如何在C中验证日期格式#

C# 如何在C中验证日期格式#,c#,.net,C#,.net,我想检查给定字符串是否为有效的.net日期格式 因此,我有下面的函数来检查日期格式是否正确 public void IsValidDateFormat(string dateFormat) { var flag = true; try { DateTime.ParseExact(DateTime.Now.ToString(), dateFormat,

我想检查给定字符串是否为有效的.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=>Passed
dateFormat=someinvalidformat
=>返回false=>Passed
dateFormat=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
在格式本身无效时抛出。我改变了答案。