Caro(a) Leitor(a), hoje eu vou mostrar de forma simples como comparar a hora atual com a hora retornada do banco de dados. Não é apenas a hora atual, é o intervalo de hora inicial e hora final com a hora atual. Não vou mostrar como ir ao banco de dados nem nada, vou focar mais na funcionalidade.

O grande problema é que, no banco de dados são gravados apenas os números sem os dois pontos no meio. 

Utilizado
Ferramenta Visual Studio 2012
Linguagem de programação C#
Tipo de projeto: Web ou Form

A informação que retorna do banco de dados é o valor da hora sem os dois pontos, por exemplo: 0800 (esse valor quer dizer oito horas). No banco de dados, existe o valor inicial e final.

Esse valor é verificado antes de fazer qualquer outro procedimento. Para que o procedimento seja feito, o horário precisa estar entre 0800 horas e 1200 horas; isto é; precisa ser feito uma comparação entre as horas retornadas e a hora atual.

Existem duas formas de fazer essa comparação de hora. Lembre-se que alguns programadores gostam de utilizar o comando TimeStamp mas neste caso escolhi fazer de outra maneira. Listagem 1.

Listagem 1 – Método Load
private void Form1_Load(object sender, EventArgs e)
{
String _horaini = "0800";

       String _horafim = "1143";

       String _horaAgora = DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString();
}

Para este exemplo, resolvi mostrar no método “load” como fazer todo o processo de comparação. Note que na listagem 1, eu tenho as variáveis de “_horaini”, “_horafim” e “_horaAgora”.

Na variável “_horaini” tenho o valor “0800”, “_horafim” tenho o valor “1143” e na “_horaAgora” o valor da hora atual.

Depois de pegar estes valores é necessário fazer a comparação da hora de agora com a hora da variável. Essa hora inicial e final pode ser pega diretamente do banco de dados.


Primeira forma de comparação
A primeira forma de comparação eu fiz utilizando “parse” com maior, igual e menor. Listagem 2.

Listagem 2 – Primeira comparação

if (int.Parse(_horaAgora) >= int.Parse(_horaini) && int.Parse(_horaAgora) <= int.Parse(_horafim))
{
//executa o procedimento
}

Se a hora agora for maior ou igual à hora inicial, e for menor ou igual a hora final, então eu posso chamar o procedimento ou exibir uma mensagem para o cliente.

Segunda forma de comparação

A segunda forma de comparação utilizei o comando “CompareTo” da própria “String” do “Framework” Microsoft. Fica bem mais simples de fazer só que um pouco mais complicado de entender.
Mas com o que vou falar aqui fica simples de entender. Listagem 3.

Listagem 3 – Segunda comparação

if (_horaAgora.CompareTo(_horaini) > -1 && _horaAgora.CompareTo(_horafim) < 1)
{
//chama algum procedimento
}

Note que o comando foi feito a partir da hora agora em vez da hora inicial. Comparei a hora agora com a hora inicial, se for maior que -1 e for menor que 1 então ele chama o procedimento.

Esse método “CompareTo” retorna sempre um número entre as comparações: -1, 0 e 1. Quando o método retorna -1, quer dizer que o valor é menor do que o comparado. Quando retorna 0, quer dizer que o valor comparado é igual. Quando retorna 1 o valor é maior do que o comparado.

Isso é bem simples. Utilizando esse entendimento, eu fiz a segunda comparação utilizando apenas um “if” com duas verificações, enquanto que na listagem 2 foram feitas várias verificações.

No nosso caso, a hora tem que estar entre 08:00 horas e 11:30 horas, se tiver neste intervalo, então ele executa o que tem que ser executado. Na listagem 4 eu mostro todo o código feito. 

Listagem 4 – Todo o código

private void Form1_Load(object sender, EventArgs e)
{
String _horaini = "0800";

       String _horafim = "1143";

       String _horaAgora = DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString();

//primeira comparacao
       if (int.Parse(_horaAgora) >= int.Parse(_horaini) && int.Parse(_horaAgora) <= int.Parse(_horafim))
       {
        MessageBox.Show("A hora está entre os valores");
 }

//segunda comparacao
        if (_horaAgora.CompareTo(_horaini) > -1 && _horaAgora.CompareTo(_horafim) < 1)
        {
        MessageBox.Show("A hora está entre os valores");
 }
}

Bom, espero que tenha gostado e qualquer dúvida pode entrar em contato pelo site pessoal www.mauriciojunior.org