Problema cálculo de diferença entre horas

6 respostas
A

Pessoal,

tenho duas datas e preciso da quantidade de horas que se passaram de uma para outra. Para isso fiz o seguinte:

dataFim.getTime() - dataInicio.getTime() / (double)(1000*60*60);

Aparentemente, essa linha retorna o resultado correto. Porém vejamos o exemplo:

dataInicio = 01/11/2008 00:00:00
dataFim = 02/05/2009 00:00:00

Quantidade de dias decorridos: 182
Quantidade de horas (resultado): 4369,00

Porém, facilmente vemos que 182 * 24 = 4368

Ou seja, em alguns periodos (desconfio que sejam em periodos grandes) é acrescentado 1 hora no resultado. Desconfio que tenha algo haver com o horário de verão…

Alguem sabe algo a respeito disso?

Obrigado

6 Respostas

D

Pra fazer calculos com datas o melhor é utilizar a classe java.util.Calendar. você pode configurar o timazone também assim evita problemas com fuso horário

A

não existe problemas com fuso horário nessa questão amigo

V

Como vc calculou a quantidade de dias decorridos?

D

Kra isso aqui

SimpleDateFormat sdFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");

            Date dataInicio = sdFormat.parse("01/11/2008 00:00:00");
            Date dataFim = sdFormat.parse("02/05/2009 00:00:00");

            long diff = dataFim.getTime() - dataInicio.getTime();

            long resultado = diff / (1000*60*60);

            System.out.println(resultado);

me mostra como resultado 4368, o teu problema pode ter sido na hora de setar a parte de horas na data.

A

viniGodoy,

calculei a quantidade de dias decorridos conforme o código abaixo. Porque a pergunta? Desconfia de algo?

// COLOQUEI OS DOIS MÉTODOS AQUI:

     /**
      * Calcular diferenca em horas entre duas datas.
      *
      * @param firstDate Data inicial.
      * @param lastDate Data final.
      * @return int O numero de horas.
      */
     public static double dateDiffHoras( final Date firstDate, final Date lastDate ) {
    	 return (lastDate.getTime() - firstDate.getTime()) / (double)(1000*60*60);
     }

     /**
      * Calcular diferenca em dias entre duas datas.
      *
      * @param firstDate Data inicial.
      * @param lastDate Data final.
      * @return int O numero de dias.
      * @throws Exception exception.
      */
     public static int dateDiffDays( final Date firstDate, final Date lastDate ) throws Exception {
         return Math.round( dateDiffHours(firstDate, lastDate) / (float) 24 );
     }

    // ACABEI DE DESCOBRIR QUE ESTÁ USANDO ESSE MÉTODO AQUI:
     /**
      * Calcular diferenca em horas entre duas datas.
      *
      * @param firstDate Data inicial.
      * @param lastDate Data final.
      * @return int O numero de horas.
      */
     public static int dateDiffHours( final Date firstDate, final Date lastDate ) {
         return Math.round( (lastDate.getTime() - firstDate.getTime()) / (float) (1000*60*60) );
     }

// SERÁ QUE É ISSO?
A

Dobau,

executei o seu código e apresentou o resultado 4369… Não sei como vc chegou ao resultado 4368…

Criado 3 de junho de 2011
Ultima resposta 6 de jun. de 2011
Respostas 6
Participantes 4