Olá pessoal, hoje eu vou falar como validar a hora usando a linguagem C# e a ferramenta Visual Studio criada pela Microsoft. Muitos não sabem fazer isso usando a linguagem C#, só saber fazer alguma máscara na partes da visualização mas é importante também validar dentro do código fonte antes de enviar os dados para o banco de dados por exemplo.

Então, para que saiba a melhor forma de fazer, faça:

  1. Valide na interface do usuário;
  2. Valide também dentro do código antes de fazer o que precisa fazer.

Muitas vezes a hora vem junto com a data usando o tipo do dado chamado DateTime, acho que você já deve ter percebido isso. Com essa função, não importa a forma que passa os dados porque aqui iremos receber um objeto. Mas antes de qualquer coisa é bom verificar o que é hora inválida, hora nula e tudo mais.

Para fazer isso, crie constantes para melhor identificar dentro do seu projeto. O código 1.1 mostra a primeira constante criada onde será usada dentro de uma função.

 /// <summary>
/// Hora nula.
/// </summary>
public static readonly TimeSpan HORANULA = new TimeSpan(24, 0, 1);

Código 1.1 - Hora nula

No código 1.1 a constante de hora nula é criada, ou seja, esse valor representa uma hora nula que pode ser comparada dentro de alguma função. O próximo código 1.2 mostra outra constante para hora inválida.

/// <summary>
/// Representa uma hora inválida.
/// </summary>
public static readonly TimeSpan HORAINVALIDA = new TimeSpan(24, 0, 2);

Código 1.2 - Hora inválida

No código 1.2 mostra como representar uma hora inválida. Não sei se sabe mas na programação existe uma diferença muito grande entre hora nula e hora inválida, e para isso é importante se atentar sobre a diferença desses dois parâmetros. A minha ideia foi declarar esses parâmetros antes de usá-los dentro de um método ou função. É importante analisar também qual a sua prioridade dentro do sistema da sua empresa ou do seu cliente.

O próximo passo é criar uma função que recebe um objeto e testa os dados recebidos através das constantes declaradas anteriormente. Lembro que as contantes declaradas são feitas para serem usadas em qualquer parte do código. Veja o código 1.3.

    public static Bool validaHora(object value)
    {
    	try
        {
            var hora = (TimeSpan)value;

            if (hora == HORANULA)
            {
                return false;
            }

            return hora != HORAINVALIDA && hora.TotalDays < 1; //hora maior que 23:59:59
            
       }
       catch (InvalidCastException castInvalid)
       {
			 throw castInvalid;
       }
       catch(Exception ex)
       {
       	throw ex;
       }
    }

Código 1.3 - Método que valida a hora

Esse método recebe o valor e transforma em TimeSpan. O próximo passo é verificar se a hora é nula, se for nula ele retorna false. Ao contrário, ele verifica se a hora é diferente da horário inválida e junto da variável hota ele verificar a quantidade de dias menor que 1, isso garante que a hora informada não seja maior que 23:59:59 horas.

Em caso de erro de cast é retornado e se der qualquer outro tipo de erro é retornado também. Espero que tenha ajudado e qualquer dúvida por favor entre em contato pelo site https://www.mauriciojunior.net.