Olá pessoal, estou desenvolvendo que fará o calculo de duração e tempo médio.
No caso, preciso apenas considerar a hora inicia e final da lista e realizar sua média.
Estou usando Joda-Time para a ocasião e gostei bastante de trabalhar com a ferramenta.
Montei em todo caso, um programa de teste para simular a informação que eu terei na aplicação real e
consegui avançar bastante usando LocalTime + Period, mas não sei com efetuar a média dessa lista.
Eis ± o que estou fazendo:
//devolve uma hora randomica em Date - isso simula mais ou menos o local de onde eu busco a informação
public static Date request(){
RandomDataImpl r = new RandomDataImpl();//aqui usei a apache math
Calendar cal = Calendar.getInstance();
int hor = r.nextSecureInt(0, 23);//seta o min e max de hora
int min = r.nextSecureInt(0, 59);//seta o min e o max de minutos
int seg = r.nextSecureInt(0, 59);//seta o min e max de segundos
cal.set(1, 0, 1, hor, min, seg); //define
return cal.getTime();//retorna o date
}
public static void main(String[] args) throws InterruptedException{
List<Foo> lista = new ArrayList<Foo>();// lista de qualquer coisa com nome, hInicio e hFim
int i=0;//quantidade na lista - maximo de 5
while(true){//executa até que seja cumprido o determinado em i
Foo foo = new Foo();//inicia um novo objeto
foo.setNome("Indice : "+i);//diferencia os objetos pelo loop
foo.sethInicio(request());//requisita o objeto de Date randomico
while (true) {//aqui determina a parte da hora fim
new Thread().sleep(100);
foo.sethFim(request());//requisita a horafinal
if (foo.gethFim().after(foo.gethInicio())) {//garante que a hora estará depois da hora inicial
i++;//adiciona i para o termino futuro da lista
break;//encerra o loop
}
}
lista.add(foo);//adiciona o FOO com indice/horainicial/horafinal
if (i==5) {
break;//termina o loop quando i atingir valor 5
}
}
for (Foo foo : lista) {//exibe os objetos adicionados
System.out.println(foo.toString());
}
System.out.println("Duração");
for (Foo foo : lista) {//realiza o calculo da duração dos indices
LocalTime inicio = new LocalTime(foo.gethInicio());
LocalTime fim = new LocalTime(foo.gethFim());
Period periodo = new Period(inicio, fim);
String duracao = periodo.getHours()+":"+periodo.getMinutes()+":"+periodo.getSeconds();
System.out.println(foo.getNome()+" Duração: "+duracao);
}
}
No caso, estou querendo ver a média da duração. No caso a Duração de todos/lista.size() mas não vem o valor exato do que eu quero, já que provavelmente estou somando tudo do jeito errado.
Tem algo dentro do Joda-Time que faça isso? Ou alguma formula que eu estou “perdendo” ali no processo?