我有以下方法,它能正常工作,只要处理一个真正的无效/有效日期,但是,如果我遇到一个空的字符串或日期与掩码如__/__/____
,我想通过那些有效,但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;
}
你几乎肯定会写一个正则表达式来处理这个问题。 – Yuck
看看这里:http://stackoverflow.com/questions/4962276/best-way-to-get-a-date-with-net – frenchie
@Yuck - 我想到了正则表达式。你能够提供答案吗? – Xaisoft