Olá galera, estou com o seguinte problema tenho um método que faz um calculo de datas, porém se for maior que 24 horas ou seja mais de um dia ele se perde:
public static String somaHora(String hora, String hora2) {
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm");
formatter.setTimeZone(TimeZone.getTimeZone("GMT"));
long min_1 = getMinutos(hora, formatter);
long min_2 = getMinutos(hora2, formatter);
long result = (min_1 + min_2) * 60 * 1000;
Date data = new Date(result);
return formatter.format(data);
}
Testando o que acontece:
public static void main(String[] args) {
System.out.println("menos de um dia " + somaHora("05:43", "17:53"));
System.out.println("mais de um dia " + somaHora( "23:36","02:24"));
}
O problema que estou calculando um período de um mes, como vocês fazem esses calculos de datas?
É claro que ele se perde, já que não sei com esses dados (“23:36”, “02:24”) se é 23:36 de ontem e 02:24 de hoje, ou se é 23:34 do dia 1o. de abril e 02:24 do dia 25 de dezembro. Não seria interessante passar o dia também?
Descobri debugando, mas não existe uma maneira com o Joda Time de fazer esses calculos mais facilmente?, a nova api de do Java 7 esta sendo baseada nele.
Tentei assim passando a data também e me retornou errado:
public static String somaHora(String hora, String hora2) {
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm");
formatter.setTimeZone(TimeZone.getTimeZone("GMT"));
long min_1 = getMinutos(hora, formatter);
long min_2 = getMinutos(hora2, formatter);
long result = (min_1 + min_2) * 60 * 1000;
Date data = new Date(result);
return formatter.format(data);
}
Transforma a data atual em milisegundos depois transforma a data que vc quer fazer diferenca em milisegundos depois faz uma formula matematica simples pq vai ser retorando a qtd de milisegundos ^^
dah um .getTime em algum objeto instanciado como Date isso retorna em milisegundos esse calculo eh a qtd de milisegundos de 1 dia (24 * 60 * 60 * 1000) dae po exemplo vc pega a data final e diminui pela data de inicio isso va iretornar a qtd de milisegundos dae vc divide por isso ae pra ve qts dias deram se quiser passar pra hora ow qualquer otra coisa so por a cabeça pra funfar ^^
Hum, agora entendi. É que a diferença entre duas datas (que é em milissegundos) não pode ser diretamente formatada como sendo um valor em horas e minutos como você queria (deve ter lhe retornado algo como 01/01/1970 xx:yy ou coisa mais estranha). Nesse seu caso, se você não estiver usando o Joda Time, tem de fazer “no braço”. Algo como:
long ms = ...diferença entre as duas datas, em milissegundos...;
int qtdMinutos = (int) (ms / 1000 / 60);
int minutos = qtdMinutos % 60;
int qtdHoras = qtdMinutos / 60;
return String.format ("%02d:%02d", qtdHoras, minutos);