Calcular diferença de tempo

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: [code]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);[/code]
E tenho como data inicial a data que está gravada no banco, a qual estou capturando da seguinte maneira:[code]Date data = rs.getDate(2);
Date myDate = data;
DateFormat df;

	        df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
			String datasis = String.valueOf(df.format(myDate));[/code]

Acontece que como data final eu obtenho por exemplo o seguinte resultado:[quote]2005-06-10 21:20:16.567 [/quote]
E como data inicial, obtenho como exemplo o seguinte resultado:[quote]2005-6-10 11:35:8.143[/quote] Lembrando que os dois resultados estão como string.

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

cara, nao sei se eh bem oke vc que, mah dah pra faze assim pra pega a diferença em horas:

//pega o tempo atual:
float tempoInicial = System.currentTimeMillis();

//faz alguma coisa

//pega o tempo que passou:
float tempoDecorrido = System.currentTimeMillis() - tempoInicial;

//transforma o tempoDecorrido pra horas:
float tempoEmHoras = tempoDecorrido/(60601000F);

se isso serve blz, se nao foi mal nao ajuda como vc keria

valeu

acho que o colega didiosam se enganou à respeito da sua solução.

se não me engano, voce precisa do tempo em horas do horário atual ate um horário que voce já tem, então aconselho fazer isso:

Date data = rs.getDate(2);  // a data que voce pega do banco
Calendar dataInicial = new Calendar();
dataInicial.setTime(data);

long diferenca = System.currentTimeMillis() - dataInicial.getTimeInMillis();
//AQUI diferenca EH A DIFERENÇA DAS DATAS EM MILISEGUNDOS
diferenca /= 1000;    //DIFERENCA EM SEGUNDOS
diferenca /= 60;       //DIFERENCA EM MINUTOS
diferenca /= 60;       //DIFERENCA EM HORAS

espero ter ajudado

viu caro javaAdicted, tipow a minha ideia na hora de explica como poderia ser solucionado isso era como vc coloca, por isso eu colokei que vc primeiro tionha uma data (tempo) inicial, e após faze algumas coisas e tals entaum vc tinha outro tempo certo?..entaum dai vc pegava essa diferença e a transformava em horas, divindo pelo 10006060, q correspondem aos milisegundos, segundos e minutos, tipow foi mal se deu a entende errado minha ideia, nao era a intençao complica a vida de ngm…heheeheh…

abraços

bah viu veiow eu tava ate agora olhando e achei onde eu dexei confuso ali na minha explicaçao, é que explica naum eh meu forte…heeheheh…foi mal e valeu por fala ai javaAdicted

valeu

[quote=“didiosam”]viu caro javaAdicted, tipow a minha ideia na hora de explica como poderia ser solucionado isso era como vc coloca, por isso eu colokei que vc primeiro tionha uma data (tempo) inicial, e após faze algumas coisas e tals entaum vc tinha outro tempo certo?..entaum dai vc pegava essa diferença e a transformava em horas, divindo pelo 10006060, q correspondem aos milisegundos, segundos e minutos, tipow foi mal se deu a entende errado minha ideia, nao era a intençao complica a vida de ngm…heheeheh…

abraços[/quote]

cara, voce deu a solução pra DouglasCar, a mesma que eu pensei, usar a representacao do tempo em milisegundos pra fazer a conta, voce so se enganou a respeito do retorno do metodo currentTimeMillis() que é um long, nao um float (pelo menos eu nao sei se tem um que retorna float). so citei aquela frase porque realmente pensei que voce nao tinha entendido qual era a duvida do colega, e isso, a meu ver, poderia sim ter complicado o entendimento da solução.
desculpe se pareci chato ou pedante,so queria que duvida nao persitisse…
continue dando suas sugestoes para os colegas com duvidas, lembre-se que quem voce ajuda, um dia, pode te ajudar.

flw

Valeu pessoal pelas dicas, vou testar o que me passaram e depois posto o resultado aqui no fórum, falou. Obrigado!

Pessoal, testei o código que me passaram e o cálculo 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:

[code]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);[/code]Sendo que fiz isto uns 5 minutos após gravar a data no banco, me foi retornada a seguinte resposta na tela:[quote]diferencaHoras: 7 [/quote]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.

voce podia tentar isso:

Calendar dataInicial = Calendar.getInstance();
Date data = rs.getDate(2, dataInicial);
long diferenca = System.currentTimeMillis() - dataInicial.getTimeInMillis();
long diferencaHoras = diferenca/(60*60*1000);

o metodo getDate() de ResultSet retorna um java.sql.Date enquanto o Calendar recebe um java.util.Date. nao sei qual é a diferença das duas, mas vale ressaltar…
esse metodo getDate(int, Calendar), se nao me engano, ja coloca a data recebida na instancia de Calendar passada, é bom fazer o teste.

qq bronca posta ai.

flw

Valeu pela ajuda javaAdicted, mas consegui utilizando o seguinte trecho de código:[code]Date data = rs.getTimestamp(2); // a data que voce pega do banco

		Calendar dataInicial = Calendar.getInstance();						
		dataInicial.setTime(data);			
		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[/code]

Obrigado! :okok: