Problema com cálculo de hora [RESOLVIDO]

Boa tarde a todos. Estou com dificuldade para fazer cálculo com hora.

Eu tenho uma horaFinal, uma horaInicial e faço a diferença entra as duas.

 Long diferenca = (horaFinal.getTime() - horaInicial.getTime()); 

Só que depois, quando eu tento mostrar o resultado em hora, ele mostra uma resultado absurdo.

 Time time = new Time(diferenca);

O que eu pude notar é que quando eu pego o valor em milissegundos da hora, é um número de tamanho bem grande (13 casas). Mas quando eu faço a diferença
entre as duas o valor que sobra é de um tamanho pequeno (8 casas). Eu creio que o problema possa estar aí, mas não consegui resolver. Será que alguém pode
dar uma força?

Use o Calendar:

Calendar dataIni = Calendar.getInstance();
Calendar dataFim = Calendar.getInstance();
int diferançaHora = dataFim.get(Calendar.HOUR_OF_DAY) - dataIni.get(Calendar.HOUR_OF_DAY);
System.out.println(diferançaHora);

neste exemplo ele irá imprimir zero porque está instanciando as duas variáveis uma seguida da outra
então elas terão a mesma hora e a diferença será zero, mas para fazer esse tipo de cálculo é melhor
utilizar a classe Calendar

Abraço

Legal marcosharbs, já evoluí bastante. Mas agora, quando a diferença é de 10 segundos, por exemplo. ele só mostra 10, em vez
de mostrar 00:00:10. Posso usar SimpleDateFormat pra esse cara?

Só pra mostrar o que eu fiz:

Calendar c = Calendar.getInstance();
//tempoJaCalculado é a diferença (Long)
c.setTimeInMillis(tempoJaCalculado);
System.out.println("Hora já calculada: " + c.get(Calendar.HOUR_OF_DAY));

Mas não deu certo ainda.

não to entendendo
vc quer comparar as horas ou quer pegar a data em milesegundos?

vc quer diminuir duas datas e dai converter a diferença para horas?

Pegar a diferença de tempo (em HH:mm:ss) das datas e exibir.

 Long diferenca = dataA.getTime() - dataB.getTime();

Eu pensei que pudesse fazer assim:

 dataA - dataB; 

Mas não dá :oops: (um objeto menos o outro também né… daí sai um rebosteio só)

Pare de sofrer:
http://joda-time.sourceforge.net/

amigo para calculos assim utiliza a JODA-TIME, o unico defeito é que nao existe doc em portugues, mas com um pouquinho de esforço vc consegue rapidamente aprender a utilizar a api

no seu caso com ela é simples:

DateTime dataInicial = new DateTime();
DateTime dataFinal = new DateTime();

Period tempoEntreAsDatas = new Period(dataInicial, dataFinal);

assim ele calcula horas, minutos e segundos como vc quer

grande abrassssssssss

Legal, achei interessante.
No meu caso, que obrigatoriamente trabalho com valores Long (pq vem long do banco), eu poderia usar a classe Duration, correto?

isso, Duration ou Period de acordo com a necessidade… um pode ser convertido no outro

abrassss

Ainda o mesmo problema. Vou descrever o que está acontecendo.
Quando eu subtraio os valores em milissegundos, obtenho o valor 10000 (10 segundos).
Mas quando preciso transformar esse valor em hora (HH:mm:ss), em vez de obter 00:00:10,
eu obtenho 21:00:10. Entra aquele 21 no lugar da hora, quando na verdade deveria ser 00:00:10.
É isso o que acontece.

vc ja esta trabalhando com a joda-time ? se sim, poste o codigo

vc quer é o intervalo entre uma data/hora e outra ? ex: das 14 horas as 18 horas = 4 horas

abrassss

Ah sim:

//neste momento, tempoJaTrabalhado é um Long de valor = 10000, ou seja, 10 segundos
Period p = new Period(tempoJaTrabalhado);
p.getHour();

Como eu fazia antes:

//neste momento, tempoJaTrabalhado é um Long de valor = 10000, ou seja, 10 segundos
Time time = new Time(tempoJaTrabalhado);
System.out.println(time);
//daí ele exibe 21:00:10, quando deveria exibir 00:00:10

o metodo eh getHours() ao inves de getHour();

mas td bem… apos a chamada esse metodo retornara 0… o que vc esperava ?

se imprimir p, ele chamara o metodo toString(), que retornara “PT10S”

caso queira imprimir 00:00:10 vc pode utilizar a classe PeriodFormatterBuilder

http://joda-time.sourceforge.net/api-release/org/joda/time/format/PeriodFormatterBuilder.html

é isso ? amigo, por favor, seja mais especifico para que possamos resolver o problema

abrasss

Criei um método que faz os cálculos a partir de um Long. Foi custoso, mas tá funcionando: transformar um long em hora corretamente. Obrigado a todos.