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: