Senhores, tenho um método que gera dados para um relatório e surgiu uma necessidade que está me segurando um pouco.
O sistema é antigo, já bastante funcional porém surgiu a necessidade de adicionar uma informação a mais neste relatório. Já existe um campo ‘duracao’ que é a duração em horas de um determinado evento. Esta ‘duracao’ é uma String. Como já funciona há bastante tempo a primeira solução que me veio em mente foi armazenar estes valores em uma lista, e simplesmente somá-los.
ex:
// Depois de populada a lista
def duracaoTotal;
def duracao = ['00:04:25','01:25:04','00:03:21','04:12:51','04:07:40','01:00:00']
for(i=0; i<lista.size(); i++){
duracaoTotal += duracao[i]
}
Com inteiros funcionaria beleza… Alguma idéia de como posso somar apenas as horas?>
Repare que isso é uma String e que vc quer pegar apenas os primeiros caracteres
String hora1= "03:04:25";
String hora2= "02:04:25";
int horaInt=Integer.parseInt(hora1.substring(0,2));
int horaInt2=Integer.parseInt(hora2.substring(0,2));
int somaHora=horaInt+horaInt2;
Olá, obrigado pela dica! Mas acredito que isso geraria um problema:
para horas de repente funcionaria beleza, mas… para minutos ou segundos já não daria certo.
Observe:
String hora1= "03:04:25";
String hora2= "02:04:25";
int horaInt=Integer.parseInt(hora1.substring(0,2));
int horaInt2=Integer.parseInt(hora2.substring(0,2));
int somaHora=horaInt+horaInt2;
Seu pensamento é válido mas não resolve para este caso. Considerando por exemplo os horários que você passou se os minutos forem mais altos:
String hora1= "03:45:25";
String hora2= "02:24:25";
int horaInt=Integer.parseInt(hora1.substring(0,2));
int horaInt2=Integer.parseInt(hora2.substring(0,2));
int somaHora=horaInt+horaInt2;
depois de realizado os tratamentos com substring nos minutos e segundos a saída seria: “05:69:50”… 69 minutos não funciona. O resultado deveria ser “06:09:50”
Procura na API das classes Calendar, Date ou Time, deve ter algum método para calcular isso.
Se não tiver, faça um, que soma horas respeitando o fato de 60 segundos, aumanta um minuto, 60 minutos, aumenta uma hora, 24 horas aumenta um dia, etc…
Essa só foi uma maneira.
Você pode usar o split
e fazer as lógica de minuto, segundo e hora
String hora1= "03:04:25";
String[] tempo= hora1.split(":");
int hora=Integer.parseInt(tempo[0]);
int minuto =Integer.parseInt(tempo[1]);
int segundo=Integer.parseInt(tempo[2]);
Eu vi a documentação sugerida, estou vendo tambem o JodaTime… A questão maior, é que para a minha necessidade o dia não importa. Este relatório já é funcional há muito tempo. com o campo duracao (se houver no respectivo evento), esse campo ‘duracao’ trás uma string exibindo uma hora como mencionei… Preciso apenas adicionar um “Total” no fim do relatório, mostrando a soma das durações… os dias em questão não são necessários… por isso havia pensado em guardar estas durações em uma lista, e percorrê-la somando seu conteúdo…