Calcular horas de um determinado periodo

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?

http://www.exampledepot.com/egs/java.util/CompDates.html?l=rel

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);
}

E chamando assim:

System.out.println(somaHora("01/10/2007 23:36","02/10/2007 02:23"));

O que preciso alterar em meu método?, devo usar Callendar e GregorianCalendar?

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 :stuck_out_tongue_winking_eye: se quiser passar pra hora ow qualquer otra coisa so por a cabeça pra funfar ^^

te+

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);

Cara baixei o Joda Time, você já implementou alguma coisa parecida com essa API?, a dúvida seria qual classe usar, Interval, Duration ou Period?

DateTime start = new DateTime(2004, 12, 25, 0, 0, 0, 0);
DateTime end = new DateTime(2005, 1, 1, 0, 0, 0, 0);
Duration dur = new Duration(start, end);
DateTime calc = start.plus(dur);

No meu caso estaria somando horas de cada dia de um determinado mes, para um ponto eletronico.

Onde retorno uma lista com data DD/MM/YYYY,entrada1 HH:MM,saida1 HH:MM,entrada2 HH:MM,saida2 HH:MM.

thingol, você já implementou algo com Joda Time?, para me orientar nesse caso.