Existem problemas no seu código e basicamente você converter o dado mesmo com erros, ou seja o seu isValidateDate
converte primeiro e depois testa, no if
deveria ser DateTime.TryParse
primeiro, e na verdade só ele resolveria seu problema
Código in-line
para verificação de data (DateTime):
// data extraida de algum input/componente
string data = "31/02/1990";
// declaração da data
DateTime dataConvert;
// verificando data
if (DateTime.TryParse(data, out dataConvert))
{
// data válida e
// dataConvert possui a data
}
else
{
// data inválida
// dataConvert tem o valor inicial
if (dataConvert == DateTime.MinValue)
{
// a data não foi convertida
// e a dataConvert está com valor inicial
}
}
Método para verificação:
public class Date
{
public static bool isValidate(string value)
{
DateTime result;
if (string.IsNullOrEmpty(value)) return false;
if (value.Length < 10) return false;
return DateTime.TryParse(value, out result);
}
public static bool isValidate(string value, out DateTime result)
{
if (string.IsNullOrEmpty(value))
{
result = DateTime.MinValue;
return false;
}
if (value.Length < 10)
{
result = DateTime.MinValue;
return false;
}
return DateTime.TryParse(value, out result);
}
}
Como usar:
// data extraida de algum input/componente
string data = "31/01/1990";
// declaração da data
DateTime dataConvert;
System.Console.WriteLine(Date.isValidate(data));
System.Console.WriteLine(Date.isValidate(data, out dataConvert));
System.Console.WriteLine(dataConvert);
Na verdade nem precisa fazer isso, mas, seria uma forma de formatar a sua lógica de processo aonde eu percebi que é para receber o ano maior de 1953 como seria:
Adicione mais um método nessa classe Date igual exemplo abaixo:
public class Date
{
public static bool isValidate(string value)
{
DateTime result;
if (string.IsNullOrEmpty(value)) return false;
if (value.Length < 10) return false;
return DateTime.TryParse(value, out result);
}
public static bool isValidate(string value, out DateTime result)
{
if (string.IsNullOrEmpty(value))
{
result = DateTime.MinValue;
return false;
}
if (value.Length < 10)
{
result = DateTime.MinValue;
return false;
}
return DateTime.TryParse(value, out result);
}
public static bool isValidate(string value, int year, out DateTime result)
{
if (isValidate(value, out result))
{
return result.Year < year;
}
return false;
}
}
Como usar:
// data extraida de algum input/componente
string data = "31/01/1990";
// declaração da data
DateTime dataConvert;
System.Console.WriteLine(Date.isValidate(data));
System.Console.WriteLine(Date.isValidate(data, 2000, out dataConvert));
System.Console.WriteLine(dataConvert);