Conversão da data de nascimento para idade no iReport

8 respostas
W

Bom dia meus caros amigos,

Estou necessitando de uma ajuda no que diz respeito a construção de um parâmetro no iReport.

Foi construída uma classe no netbeans chamada MarcarExame.java, e nessa classe existe um método que faz um cálculo da data de nascimento para aparecer
a idade do paciente. Segue código abaixo:

public void preencherTela(){
        java.text.SimpleDateFormat formatador = new java.text.SimpleDateFormat("dd/MM/yyyy");

        Date dataNasc = dataNascPaciente_bco;
        dtNasc.setText(formatador.format( dataNasc ));

        int idade = dataHoje.getYear() - dataNasc.getYear();
        idadePaciente.setText(String.valueOf(idade)+" anos");

            
        show();

        telaPreenchida = true;

}

Abaixo está o método para chamar o relatório:

private void visualisarActionPerformed(java.awt.event.ActionEvent evt) {                                           
        // TODO add your handling code here:
        try{
            Connection con = new Facade().getConnection();
            java.util.HashMap parametros = new java.util.HashMap();
            JasperPrint jp = JasperFillManager.fillReport("./jasper/Mapatrab.jasper", parametros, con);
            JasperViewer jrv = new JasperViewer (jp, false);
            jrv.setVisible(true);
        }   catch (Exception e) {
            e.printStackTrace();
            
        }
}

Como faço para usar o procedimento de cálculo da idade que está acima trabalhando com parâmetros no iReport. Por exemplo: O nome do campo do banco de dados
criada pela Query Design é PACIENTE_DATA_NASC. Clicando com botão direito do mouse e optando por Edit Expression, visualizo o nome desse campo. Pergunto:

1. Como faço para criar o parâmetro idade no iReport?
2. O método de cálculo da idade será feita somente na aplicação do Netbeans?
3. O método de cálculo da idade também será feito no parâmeto do iReport?

Peço por gentileza que me informe o passo a passo desse procedimento

Desde já agradeço,

Muito obrigado,

Elcio

8 Respostas

W

Bom dia caros amigos,

Através da ajuda de um amigo, o mesmo passou um parâmetro para conversão da data de nascimento em idade, mas quando coloco essas linhas no edit expression do iReport aparece somente os sinais de divisão (/) em vermelho, então quando clico em view não aparece o relatório e por sua vez não funciona o código por causa do erro. Abaixo segue o código:

((((($F{datanascimento}.getTime() - new Date().getTime()) / 1000) / 60) / 60) / 24) / 365

Se alguém puder me ajudar agradeço muito

Muito obrigado,

Elcio

E

Olá webelcio!

Eu tbem tive vários problemas com conversões no iReport, então eu fiz as conversões no Java e passei já convertido pro iReport. Foi bem mais simples.

Espero que seja isso que vc quer!
[ ] 's

M

Boa tarde!

Os sinais de operações aritméticas nao funcionam dessa forma no ireport, veja abaixo:

divisão / = .divide(java.math.BigDecimal,int,java.math.RoundingMode)

multiplicação * = .multiply(java.math.BigDecimal)

soma + = .add(java.math.BigDecimal)

subtração - = .subtract(java.math.BigDecimal)
((((($F{datanascimento}.getTime().subtract(new Date().getTime()).divide(BigDecimal.valueOf(1000),BigDecimal.ROUND_HALF_DOWN,2)BigDecimal.valueOf(60),BigDecimal.ROUND_HALF_DOWN,2)
BigDecimal.valueOf(60),BigDecimal.ROUND_HALF_DOWN,2)BigDecimal.valueOf(24),BigDecimal.ROUND_HALF_DOWN,2)BigDecimal.valueOf(365),BigDecimal.ROUND_HALF_DOWN,2)))

No ireport operações aritméticas são feitas dessa maneira, então pra facilitar crie uma classe java que faça essas conversões, e chame elas dentro do Edit Expression passando a sua data como parametro
por ex:

DateUtil.converterData($F{datanascimento})

São as opções que vc pode adotar para esses casos de conversões de datas e horas.

Att.

W

Boa tarde a todos e obrigado pelas as respostas. Mas ainda estou com uma dúvida:

A classe no qual devo montar no java será exatamente como está para iReport ou não?

O nome do atributo que foi criado automaticamente pela query do iReport foi PACIENTE_DATA_NASC. Pergunto. Posso usar esse atributo para ser passado como parâmetro? Por exemplo:

DateUtil.converterData($F{PACIENTE_DATA_NASC})

Dentro desse atributo já encontra-se a data que foi digitada.

Desde já agradeço,

Elcio

W

Bom dia caros amigos,

Consegui uma classe sobre conversão da data de nascimento para idade de um colega no próprio GUJ, segue abaixo:

import java.util.Calendar;   
import java.util.Date;   
  
/**  
*@Author: Diener Maick Piske  
*/  
  
public class Data {   
   public Data(Date data){   
      System.out.println(calcIdade(data));   
   }   
      
   public int calcIdade(Date dataNasc){   
      Date hoje = new Date();   
      Calendar cal = Calendar.getInstance();   
         
      cal.setTime(hoje);   
      int day1 = cal.get(Calendar.DAY_OF_YEAR);   
      int ano1 = cal.get(Calendar.YEAR);   
         
      cal.setTime(dataNasc);   
      int day2 = cal.get(Calendar.DAY_OF_YEAR);   
      int ano2 = cal.get(Calendar.YEAR);   
         
      int nAno = ano1 - ano2;   
         
      if(day1 < day2)   
         nAno--; //Ainda não completou aniversario esse ano.   
            
      return nAno;   
   }  
 
      public static void main(String[] args){     
      Calendar c = Calendar.getInstance();     
      c.set(1988, 2, 23); // Dia começa de 1 mesmo é normal.já o mês         começa de 0 não de 1, ou seja esta data se refere ao dia 23 de         março de 1988.   
      new Data(c.getTime());     
   }

Então conforme conversa com um dos amigos, o mesmo informou que deveria passar essa classe já convertida para o edit expression do iReport, porém quando clico em view do ireport não aparece nada. O comando no edit expression ficou assim:

DateUtil.Data($F{PACIENTE_DATA_NASC})

O que estou fazendo de errado, a idade não aparece convertida no iReport.

Certo de contar com a ajuda de todos,

Elcio

M

Bom dia!!

Vc adicionou essa classe ao seu classpath do ireport ?

em Ferramentas -> Opções -> Ireport -> classpath

Att.

W

Boa tarde ManoJava,

Ainda não fiz isso, vou tentar ok.

Muito obrigado,

Elcio

W

Boa tarde ManoJava ou qualquer outro colega,

Entrei no netbeans em ferramentas, opções, iReport e classpath. Cliquei em Add Jar, selecionei a opção todos os arquivos e adicionei o arquivo Data.class, mas infelizmente está acontecendo a mesma coisa. Estou fazendo alguma coisa errada?

Desde já agradeço,

Elcio

Criado 17 de outubro de 2011
Ultima resposta 25 de out. de 2011
Respostas 8
Participantes 3