繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM