Só que depois, quando eu tento mostrar o resultado em hora, ele mostra uma resultado absurdo.
Timetime=newTime(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?
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
oddy.silva
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?
oddy.silva
Só pra mostrar o que eu fiz:
Calendarc=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.
marcosharbs
não to entendendo
vc quer comparar as horas ou quer pegar a data em milesegundos?
marcosharbs
vc quer diminuir duas datas e dai converter a diferença para horas?
oddy.silva
Pegar a diferença de tempo (em HH:mm:ss) das datas e exibir.
Longdiferenca=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ó)
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
assim ele calcula horas, minutos e segundos como vc quer
grande abrassssssssss
oddy.silva
Legal, achei interessante.
No meu caso, que obrigatoriamente trabalho com valores Long (pq vem long do banco), eu poderia usar a classe Duration, correto?
renanreismartins
isso, Duration ou Period de acordo com a necessidade… um pode ser convertido no outro
abrassss
oddy.silva
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.
renanreismartins
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
oddy.silva
Ah sim:
//neste momento, tempoJaTrabalhado é um Long de valor = 10000, ou seja, 10 segundosPeriodp=newPeriod(tempoJaTrabalhado);p.getHour();
Como eu fazia antes:
//neste momento, tempoJaTrabalhado é um Long de valor = 10000, ou seja, 10 segundosTimetime=newTime(tempoJaTrabalhado);System.out.println(time);//daí ele exibe 21:00:10, quando deveria exibir 00:00:10
renanreismartins
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