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