簡體   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