Calcular diferença de tempo

6 respostas
D
Pessoal, gostaria de ver se alguém poderia me ajudar a resolver um problema. Estou tendo de calcular a diferença entre duas datas e retornar como resposta o número em horas. Acontece que tenho como data final a data do sistema, a qual obtenho da seguinte maneira:
Calendar calendario = Calendar.getInstance(); 
	           
int hora = calendario.get(Calendar.HOUR); 
int mins = calendario.get(Calendar.MINUTE); 
int segs = calendario.get(Calendar.SECOND); 
int mil = calendario.get(Calendar.MILLISECOND);

int dia = calendario.get(Calendar.DAY_OF_MONTH); 
int mes = calendario.get(Calendar.MONTH); 
int ano = calendario.get(Calendar.YEAR);

String data_sist = (ano + "-" + (mes + 1) + "-" + dia + " " + hora + ":" + mins + ":" + segs + "." + mil);
E tenho como data inicial a data que está gravada no banco, a qual estou capturando da seguinte maneira:
Date data = rs.getDate(2);
Date myDate = data; 				
 		        DateFormat df;
 		        
 		        df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
				String datasis = String.valueOf(df.format(myDate));
Acontece que como data final eu obtenho por exemplo o seguinte resultado:
2005-06-10 21:20:16.567
E como data inicial, obtenho como exemplo o seguinte resultado:
2005-6-10 11:35:8.143
Lembrando que os dois resultados estão como string.

Agradeço se alguém puder me ajudar a calcular esta diferença.

6 Respostas

C

Aprenda a buscar no forum. O botao Pesquisar ta ali em cima.
http://www.guj.com.br/posts/list/9440.java

D

Cara,

Vc tem dois Date. Pq não fazer um getTime() em cada um, subtrair os resultados e dividir até chegar em horas???

long milisAtual = calendario.getTimeInMilis();
long milisArmazenado = myDate.getTime();
long diferenca = milisAtual - milisArmazenado;
long diferencaHoras = diferenca / 3600000;

É mais ou menos isso.

Abraços,

Diogo

D

Obrigado pessoal pelas dicas, funcionou. Acontece que verifiquei um problema que gostaria de ver se alguém poderia me dar uma dica de como resolvê-lo. Tenho a busca de data ínicial que é feita no banco da seguinte maneira:Date data = rs.getDate("data");Se mando escrever esta variável data na tela ela me retorna por exemplo:

2005-6-10 2:20:32.159
Só que ao verificar o registro no banco de dados, percebi que lá esta gravado da seguinte maneira:
2005-06-10 09:21:21.487
E ao calcular a diferença de tempo em horas como no exemplo:
2005-06-10 14:16:31.423 - 2005-6-10 2:20:32.159
Me é retornada uma diferença de 14 horas, sendo que se pegarmos a data que realmente está no banco que é 2005-06-10 09:21:21.487 verifico que a diferença é de 11 horas.
Agradeço se algué tiver uma dica de como fazer para pegar do banco a data e hora exatamente como está gravado lá.

D
Pessoal, testei um novo trecho de código e o cálculo de tempo funcionou. O problema que estou encontrando é que o meu:
Date data = rs.getDate(2);
Está retornando somente a data e no momento de calcular:
long diferenca = System.currentTimeMillis() - dataInicial.getTimeInMillis();
Ele assume o horário do banco como sendo 00:00:00.000. Fiz um exemplo para testar e gravei no banco a data: 2005-06-13 07:01:16.670 e quando calculei o resultado com o seguinte trecho de código:
Date data = rs.getDate(2);  // a data que voce pega do banco             
          
         out.println("datainicial" + data);          
          
         Calendar dataInicial = Calendar.getInstance();                   
         dataInicial.setTime(data);          
         out.println("dataInicial:" + dataInicial);          
         out.println("dataatual:" + System.currentTimeMillis());          
          
         long diferenca = System.currentTimeMillis() - dataInicial.getTimeInMillis();          
         long diferencaSeg = diferenca /1000;    //DIFERENCA EM SEGUNDOS 
         long diferencaMin = diferenca /(60*1000);    //DIFERENCA EM MINUTOS 
         long diferencaHoras = diferenca/(60*60*1000);    // DIFERENCA EM HORAS          
          
                   out.println("diferencaHoras: " + diferencaHoras);
Sendo que fiz isto uns 5 minutos após gravar a data no banco, me foi retornada a seguinte resposta na tela:
diferencaHoras: 7
Agradeço se alguém puder me dar uma dica de como fazer para trazer do banco não somente a data, mas juntamente com ela o horário que está gravado lá. Desde de já agradeço a atenção.
C

use getTimestamp() ao inves de getDate() :wink:

D

Valeu cv pela força, deu certo. Obrigado! :thumbup:

Criado 10 de junho de 2005
Ultima resposta 13 de jun. de 2005
Respostas 6
Participantes 3