none
Dúvida com comparação de horas RRS feed

  • Pergunta

  • Boa Noite!

    Como comparo horas quando preciso, por exemplo comparar 00:00>23:30, pois quando tenho que fazer esse tipo de comparação 23:00 é maior que meia-noite. Como se resolve esse problema com comparações de horas quando for meia-noite?

    Agradeço pela ajuda.

    terça-feira, 14 de abril de 2015 00:53

Respostas

  • Boa tarde Paula,

    Sugiro que você verifique nesses links algumas formas de você fazer com que o horário seja comparado da melhor forma para você. Pois como o nosso amigo Maicon falou, 00:00 é a primeira hora do dia, então sempre será menor que qualquer outro horário, logo 23:59 é o limite para o dia atual, passando disso já se trata de outro dia. Talvez seja melhor você incluir a data na comparação juntamente com a hora, nos links abaixo você encontrará esse tipo de informação.

    http://forums.asp.net/t/1025431.aspx?How+to+compare+Time+in+C+

    https://msdn.microsoft.com/pt-br/library/system.datetime.compare%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

    Caso não consiga solucionar, desmarque a resposta e nos envie mais detalhes que continuaremos ajudando.

    Obrigado,

    Abraço!


    Eduardo Romero

    Esse conteudo e fornecido sem garantias de qualquer tipo, seja expressa ou implicita.

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais facil para os outros visitantes encontrarem a resolucao mais tarde.

    quinta-feira, 16 de abril de 2015 19:45
    Moderador

Todas as Respostas

  • Boa noite Paula Segatelli,

    Então, respondendo sua pergunta, Meia Noite sempre vai ser menor que 23:00, até mesmo 23:59.

    Leva em consideração que, a primeira hora do dia é 00:00 e a última 23:59.

    O que você pode fazer é comparar a hora e a data:

    //faz uma verificação para ver se a horaASerComparada é menor que a hora atual
    //Caso a hora seja menor, iremos comparar as datas, senão a hora é maior
    if (horaASerComparada < horaAtual) 
    {
        if(dataAtual > dataASerComparada) 
        {
    
        }
    }
    else
    {
    
    
    }

    Claro que, isso depende de alguns ajustes, de acordo com sua necessidade, mas tenta entender esse processo e ajustar a comparação necessária.

    Caso a resposte ajude, favor marcar como resposta.

    Se não conseguir questione novamente.

    Abraços

    terça-feira, 14 de abril de 2015 02:26
  • Boa Tarde, Maicon!

    Obrigada pela ajuda!

    O projeto é uma tarefa que funciona a cada meia hora. Entretanto, o periodo das 23:31 a 00:00 dá erro
    por causa dessa problema da comparação da hora.
    Primeiro verifico a hora, comparando a dataAtual com a dataPassada e depois o processo continua dependendo do retorno.
    Fiz como está abaixo, mas tem uma maneira de fazer isso sem precisar definir as horas?             
        
        //if hora atual for maior que a hora obtida
                    if (ConvHoraAtual.ToShortTimeString() == "00:00")
                    {
                        //VERIFICAR SE AS HORAS ESTAO ENTRE 23:31 A 00:00
                        DateTime intervaloC = Convert.ToDateTime("23:31");
                        DateTime intervaloB = Convert.ToDateTime("23:59");
                        DateTime intervaloD = Convert.ToDateTime("00:00");

                        if ((ConvSoma.TimeOfDay > intervaloC.TimeOfDay && ConvSoma.TimeOfDay < intervaloB.TimeOfDay) ||
                            ConvSoma.TimeOfDay == intervaloB.TimeOfDay || ConvSoma.TimeOfDay == intervaloC.TimeOfDay ||
                            ConvSoma.TimeOfDay == intervaloD.TimeOfDay)
                            retornoBool = true;
                        else
                            retornoBool = false;
                    }

                    else
                    {
                        if (ConvHoraAtual.TimeOfDay > ConvSoma.TimeOfDay)
                            //retorno recebe true
                            retornoBool = true;
                    }

    terça-feira, 14 de abril de 2015 15:11
  • Desculpe Paula,

    Não entendi seu questionamento, pode explica-lo melhor?

    quarta-feira, 15 de abril de 2015 11:11
  • Boa Noite, Maicon!

    Eu queria saber se tem como melhorar o código que fiz abaixo.

    Eu preciso comparar as horas e não tem como usar a data. 

    Preciso comparar HoraAtual com HoraRecebida para verificar se a HoraRecebida é menor que a HoraAtual.

    Mas, tenho o problema da meia noite e também da 23 horas (ao comparar 00:00 com 23:00).

    Como posso melhorar isso? 

                    DateTime intervaloD = Convert.ToDateTime("00:00");
                    DateTime intervaloE = Convert.ToDateTime("00:59");

                    DateTime intervaloG = Convert.ToDateTime("23:31");
                    DateTime intervaloH = Convert.ToDateTime("23:59");

                    if (ConvSoma.TimeOfDay <= ConvHoraAtual.TimeOfDay)
                    {
                        //VERIFICAR SE AS HORAS ESTAO ENTRE 00:00 A 00:59
                        if ((ConvSoma.TimeOfDay >= intervaloD.TimeOfDay && ConvSoma.TimeOfDay <= intervaloE.TimeOfDay) &&
                            (ConvHoraAtual.TimeOfDay >= intervaloD.TimeOfDay && ConvHoraAtual.TimeOfDay <= intervaloE.TimeOfDay))
                            retornoBool = true;
                        else
                        {
                            if (ConvHoraAtual.TimeOfDay >= ConvSoma.TimeOfDay  &&
                               !(ConvHoraAtual.TimeOfDay >= intervaloD.TimeOfDay && ConvHoraAtual.TimeOfDay <= intervaloE.TimeOfDay) &&
                               !(ConvSoma.TimeOfDay >= intervaloD.TimeOfDay && ConvSoma.TimeOfDay <= intervaloE.TimeOfDay))
                                retornoBool = true;
                        }
                    }

                    else
                    {
                        if (ConvHoraAtual.TimeOfDay == intervaloD.TimeOfDay &&
                           (ConvSoma.TimeOfDay >= intervaloG.TimeOfDay && ConvSoma.TimeOfDay <= intervaloH.TimeOfDay))
                            retornoBool = true;
                    } 

    quinta-feira, 16 de abril de 2015 01:19
  • Boa tarde Paula,

    Sugiro que você verifique nesses links algumas formas de você fazer com que o horário seja comparado da melhor forma para você. Pois como o nosso amigo Maicon falou, 00:00 é a primeira hora do dia, então sempre será menor que qualquer outro horário, logo 23:59 é o limite para o dia atual, passando disso já se trata de outro dia. Talvez seja melhor você incluir a data na comparação juntamente com a hora, nos links abaixo você encontrará esse tipo de informação.

    http://forums.asp.net/t/1025431.aspx?How+to+compare+Time+in+C+

    https://msdn.microsoft.com/pt-br/library/system.datetime.compare%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

    Caso não consiga solucionar, desmarque a resposta e nos envie mais detalhes que continuaremos ajudando.

    Obrigado,

    Abraço!


    Eduardo Romero

    Esse conteudo e fornecido sem garantias de qualquer tipo, seja expressa ou implicita.

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais facil para os outros visitantes encontrarem a resolucao mais tarde.

    quinta-feira, 16 de abril de 2015 19:45
    Moderador
  • Muito obrigada pela ajuda!
    quinta-feira, 7 de maio de 2015 00:35