Olá pessoal, hoje eu vou falar um pouco de como validar uma data usando a linguagem C# e o editor Visual Studio criado pela Microsoft. Não tem muito segredo para validar, mas talvez você esteja acostumado com outro tipo de validação, ou seja, aquela feita apenas usando JavaScript (parte do cliente), tela do usuário e não no C#. As vezes é bom fazer vários tipos de validação para garantir que o dado colocado seja válido e preciso.

As vezes é bom desabilitar o Ctrl+C e Ctrl+V também porque força o usuário a digitar o valor de forma correta. Desabilitar os controls pode ser visto aqui também no site https://www.ecode10.com, basta utilizar a busca do site.

Lembre-se que quando trata de data, existe pelo menos um valor mínimo e um valor máximo. Se for uma data de nascimento, o seu sistema precisa saber quantos anos mínimo e qual o máximo. A pessoa não pode nascer hoje dentro do seu sistema por exemplo, e lembre-se que o usuário tem uma imaginação enorme, principalmente quando se trata de dados digitados.

Existe também uma data que precisa ser levada em conta que é a data do banco de dados, por exemplo a data mínima que o SQL Server pode aceitar por padrão. Tente colocar essa data como uma constante em sua classe por exemplo.

O código 1.1 mostra uma data mínima válida para o banco de dados SQL Server

 /// <summary>
/// Data válida para o Banco de dados SQL Server
/// </summary>
private static readonly DateTime DATAVALIDASQLSERVER = new DateTime(1753, 01, 01);

Código 1.1 - Data do banco de dados

O código 1.1 representa uma data mínima válida para o banco de dados, lembre-se que isso não é padrão e cada sistema possui o seu, ou cada banco de dados possui a sua. O próximo código 1.2 representa uma data nula.

/// <summary>
/// Representa uma data nula.
/// </summary>
public static readonly DateTime DATANULA = new DateTime(1, 1, 1);

Código 1.2 - Data nula

O código 1.2 equivale a uma data nula. Já é importante falar que uma data nula e uma data inválida são dados totalmente diferentes e por isso procurei representar também uma data inválida no código 1.3.

    /// <summary>
    /// Representa uma data inválida.
    /// </summary>
    public static readonly DateTime DATAINVALIDA = new DateTime(1, 1, 2);

Código 1.3 - Data inválida

Tem uma data nula, data mínima e data inválida; o sistema pode verificar através de uma função esse tipo de valor antes de passar os dados para gravar no banco de dados ou qualquer tipo de repositório. O código 1.4 mostra uma função pública que recebe uma objeto como parâmetro e faz as validações que precisa fazer como:

  1. Verifica se a data recebida é nula;
  2. Verifica se a data recebida é inválida;
  3. Verifica se a data recebida é menor ou igual à data do banco de dados.

Veja o código 1.4 e analise todas as linhas. Foi colocado dentro do bloco try catch para que possa gerar algum tipo de erro. Os erros possíveis do método são de invalid cast e de exception normal.

public static Bool validaData(object value){
	try
   {
       var data = (DateTime)value;

       if (data == Constants.DATANULA)
       {
           return false;
       }

       return data != DATAINVALIDA && data >= DATAVALIDASQLSERVER;
   }
   catch (InvalidCastException castInvalid)
   {
       throw castInvalid
   }
   catch (Exception e)
   {
   	throw e;
   }
}

Código 1.4 - Função que valida Data usando C#

Eu fico por aqui e espero que tenha ajudado. Qualquer dúvida pode entrar em contato comigo pelo site pessoal https://www.mauriciojunior.org.