Somar horas no iReports

Olá pessoal,

Estou com problemas na geração de um total de horas utilizando váriaveis no iReports.
Utilizo banco de dados MySQL. Quero somar duas Strings que tem formato “HH:mm” e retornar o total de horas. Exemplo: 3:10 + 4:55 = 8:05

Nome da variavel: SomaPorColaborador
Variable Class = java.lang.String
Calculation = SUM
Reset Type = Group
Reset Group = Contrato
Variable Expression = $F{dados_resultado_horas_parcial_horas}

Abaixo tenho um Print da parte principal do relatório, se alguém puder me ajudar…
Muito obrigada!!!

Fico aguardando…

Boa tarde Fran!

testa dessa forma

String s = “11.10”;
float f = Float.valueOf(s).floatValue();

so que no seu caso use objeto.get para pegar o banco
e trazer para você!
para possível soma!

creio eu que deve funcionar!

Cleidson devo fazer isso dentro da minha classe que chama o relatório?
Não entendi direito…

Obg… ^^

você pode fazer isso antes de lançar no banco!
mas se vc tiver buscando do banco, e vai somar as horas,
voce deverá fazer no formulario onde vc estar buscando o objeto com o valor das horas!

ou vc faz quando inclue, ou vc faz quando busca!

Boa tarde!

Certa ocasião tive q fazer a mesma coisa, somar horas no ireport, fiz da seguinte maneira, primeiro separe horas de minutos, conforme fiz abaixo:

(TO_CHAR(FLOOR(
  ((EVEDAT1.DATA + CASE WHEN EVEDAT1.DATA < EVEDAT.DATA THEN 1 ELSE 0 END) -
   EVEDAT.DATA)*24), '00')
)HORAS,  //retirar a hora inteira de uma data ou período

TRIM((CASE WHEN EVEDAT1.DATA < EVEDAT.DATA THEN
TO_CHAR((((EVEDAT1.DATA + 1) - EVEDAT.DATA)*24), '00')
 ELSE
TO_CHAR((ROUND((((((EVEDAT1.DATA - EVEDAT.DATA)*24) - FLOOR((EVEDAT1.DATA - EVEDAT.DATA)*24))) * 60),2)), '00')
END
))MINUTOS // retirar os minutos de uma data ou período

Neste caso, retornei as horas e minutos em um campo direto no SQL, repare que ja testei se a hora final não é menor que a hora inicial(importante em cálculos e apontamentos de horas trabalhadas)
Tendo as horas e minutos calculados, no ireport fiz uma concatenação simples dentro do Edit Expression do Textfield conforme abaixo:

String.valueOf($F{HORAS}) + ':' + (String.valueOf($F{MINUTOS}))

Obs: usando Banco de Dados Oracle, mas independente do BD a lógica será a mesma.

Att.

A questão é a seguinte pessoal, eu não quero armazer esse total no banco de dados…
Eu só quero pegar as horas parciais e somar para exibir no relatório, pois dentro do meu Banco eu já fiz esse tratamento.

Este é meu primeiro projeto, ainda to meio travada em algumas coisas…
Se eu estiver errada podem me corrigir…

ManoJava, esse código que você me passou eu chamo ele dentro de onde?
=/

Obg pela paciência!

Boa tarde!

Esse codigo q te passei são campos SQL da query do ireport, essas operações são feitas dentro do textfield em Edit Expression, se vc ja tem os dados calculados do banco entao faz a concatenação ou as operações de soma, divisão conforme o exemplo anterior.

Att.

ManoJava, o que seria esse EVEDAT1.DATA ??

Compreeendi sua lógico… só ficou um pouco nublada a idéia do código mesmo…

Obg!

Oi Fran

No caso o evedat.data é a hora/data inicial e o evedat1.data seria a hora/data final, coloquei esses nomes pois esses dados ficam armazenados numa tabela chamada eventos_datas alias “evedat”,
entao quando eu seleciono o campo hora/data dessa tabela crio duas instancias da mesma mudando o tipdat_codigo(codigo do tipo da data) e assim faço a diferença entre as duas horas/datas,
essa sintaxe que te passei ai em cima é usada no ireport, existem outras formas de achar essas diferenças, com o por exemplo uma classe do java que recebe 2 parametros(data1, data2) e te retorna
no caso um BigDecimal dias ou a diferença entre datas no formato HH:MM, etc…

Att.

Ah sim…
Acho que por isso meio que não deu muito certo no meu caso… pois vou passar infinitas horas e ele vai ter que somar tudo isso pra mim.
Não vou passar somente duas… o tratamento que você fez ali eu já havia feito no meu código na própria aplicação.
Achei esse método aqui e deu certo de concatenar String e fazer a soma, o único problema foi o final que retornou algo meio estranho.

http://www.guj.com.br/java/50285-somatorio-de-string-contendo-hora-ireport

Da uma olhadinha se for possivel, já expliquei o que aconteceu comigo lá mesmo…

Muito obrigada pela atenção!

Como eu faço para somar 3 horários do tipo Time no iReport de maneira rápida?

Por exemplo: 07:00+12:00+18:00?

Obs: No banco está:

dia entrada_matutina saida_matutina entrada_vespertina saida_vespertina entrada_noturna saida_noturna

dia do tipo Date
entradas/saidas do tipo Time