将无效日期处理为有效日期
本文关键字:有效日期 处理 日期 无效 | 更新日期: 2023-09-27 18:19:03
我有以下方法,它可以正确地处理一个真正的无效/有效的日期,但是,如果我遇到一个空字符串或一个掩码如__/__/____
的日期,我想传递这些作为有效的,但DateTime.TryParse
使它们无效。我如何修改下面的方法来传递我的无效场景?下面的方法是一个示例程序:
public bool ValidateDate(string date, out string message)
{
bool success = true;
message = string.Empty;
DateTime dateTime;
if(DateTime.TryParse(date,out dateTime))
{
success = false;
message = "Date is Invalid";
}
return success;
}
void Main()
{
//The only date below that should return false is date4.
string date = "01/01/2020";
string date2 = "";
string date3 = "__/__/____";
string date4 = "44/__/2013";
string message;
ValidateDate(date, out message); //Should return true
ValidateDate(date2, out message); //Should return true
ValidateDate(date3, out message); //Should return true
ValidateDate(date4, out message); //Should return false
}
我不能将其更改为if(!DateTime.TryParse(date3,out dateTime))
,因为这将为我想要验证的日期返回false。
我也试着做一些像if(!date3.contains("_") && DateTime.TryParse(date3,out dateTime))
,但这仍然失败。我应该颠倒验证的顺序吗?问题是,我不只是在第一个无效日期返回false,我正在构建所有无效日期的StringBuilder
,然后返回,所以我不认为:
if(DateTime.TryParse(date3,out dateTime))
return true;
else
return true;
public bool ValidateDate(string date, out string message)
{
string[] overrides = {"","__/__/____"};
bool success = true;
message = string.Empty;
DateTime dateTime;
if(!overrides.Contains(date) && !DateTime.TryParse(date,out dateTime))
{
success = false;
message = "Date is Invalid";
}
return success;
}
您可以在运行DateTime.TryParse
方法之前查看覆盖数组吗?
static string[] overrides = { "", "__/__/____" };
public bool ValidateDate(string date, out string message)
{
bool success = true;
message = string.Empty;
if(overrides.Contains(date)) { return success; }
DateTime dateTime;
if(!DateTime.TryParse(date,out dateTime))
{
success = false;
message = "Date is Invalid";
}
return success;
}
有很多方法可以剥掉这只猫的皮。我想这取决于你想把多少无效数据当作有效数据。此外,DateTime.TryParse
将考虑到当前的文化设置,所以也许你也应该?
bool ValidateDate(string date, out string message)
{
message = string.Empty;
if (date == null)
return true;
const string mask = "_";
var separator = CultureInfo.CurrentCulture.DateTimeFormat.DateSeparator;
var test = date.Replace(mask, string.Empty).Replace(separator, string.Empty);
if (string.IsNullOrWhiteSpace(test))
return true;
DateTime dateTime;
if (!DateTime.TryParse(date, out dateTime))
{
message = "Date is Invalid";
return false;
}
return true;
}
我想你也可以用正则表达式来做。有很多有效的解决方案