Diferença entre datas utilizando a classe Calendar

4 respostas
R

Boa Noite Galera!

Estou fazendo um método que deve armazer na variável [color=red]idade[/color] a diferença entre a data do sistema o ano de nascimento da pessoa. O método foi feito da como segue abaixo. Alguém teria alguma sugestão para melhorar o código? Valeu turma, espero algumas sugestões da galera.

private void calcular()
{
    double idade;
    double mili = [telefone removido].00;
    try{
        Calendar dataSistema = Calendar.getInstance();
        Calendar dataNascimento = Calendar.getInstance();
        String arrayDataNascimento[] = jtData.getText().split("/");
        dataNascimento.set(Calendar.DAY_OF_MONTH, Integer.parseInt(arrayDataNascimento[0]));
        dataNascimento.set(Calendar.MONTH,Integer.parseInt(arrayDataNascimento[1]));
        dataNascimento.set(Calendar.YEAR,Integer.parseInt(arrayDataNascimento[2]));
        idade =  ((dataSistema.getTimeInMillis() - dataNascimento.getTimeInMillis()) / mili);

        if ((idade <= 10))
            JOptionPane.showMessageDialog(this,"Mensalidade = R$80,00"+
                    "Idade = "+idade);
        else
        {
            if (idade <= 20)
                JOptionPane.showMessageDialog(this,"Mensalidade = R$"+(80*1.05)+
                        "Idade = "+idade);
            else
                if (idade <= 40)
                    JOptionPane.showMessageDialog(this,"Mensalidade = R$"+(80*1.1)+
                            "Idade = "+idade);
                else
                    JOptionPane.showMessageDialog(this,"Mensalidade = R$"+(80*1.15)+
                            "Idade = "+idade);
        }    
    }
    catch (Exception e){
         JOptionPane.showMessageDialog(this,"Ocorreu um erro ao calcular:" + e.getMessage(),"Erro",1);}
}//fim do método

4 Respostas

F

para calcular a idade…

public static int calculaIdade(Date dataNasc) {
		Calendar dateOfBirth = new GregorianCalendar();
		dateOfBirth.setTime(dataNasc);

		// Cria um objeto calendar com a data atual
		Calendar today = Calendar.getInstance();

		// Obtém a idade baseado no ano
		int age = today.get(Calendar.YEAR) - dateOfBirth.get(Calendar.YEAR);

		dateOfBirth.add(Calendar.YEAR, age);

		// se a data de hoje é antes da data de Nascimento, então diminui 1(um)
		if (today.before(dateOfBirth)) {
			age--;
		}
		return age;

	}
M

Para calcular a idade, uma boa solução é a apresentada pelo fhsantiago.

E para converter String para Date, use a classe SimpleDateFormat. Nunca faça manualmente pois é altamente propenso a erros de lógica ou de implementação. Afinal, para que reinventar a roda?

F

Se a data for String…

/**
	 * Calculo Idade usando o Padrao dd/MM/yyyy
	 * 
	 * @param dataNasc
	 * @param pattern
	 * @return int
	 * @throws PlcException 
	 */

	public static int calculaIdade(String dataNasc, String pattern) throws PlcException {
		DateFormat sdf = new SimpleDateFormat(pattern);
		Date dataNascInput = null;
		try {
			dataNascInput = sdf.parse(dataNasc);
		} catch (Exception e) {
			log.fatal(e.getMessage(), e);
		}

		Calendar dateOfBirth = new GregorianCalendar();
		dateOfBirth.setTime(dataNascInput);

		// Cria um objeto calendar com a data atual
		Calendar today = Calendar.getInstance();

		// Obtém a idade baseado no ano
		int age = today.get(Calendar.YEAR) - dateOfBirth.get(Calendar.YEAR);

		dateOfBirth.add(Calendar.YEAR, age);

		if (today.before(dateOfBirth)) {
			age--;
		}
		return age;

	}
R

Ok galera, valeu pelas dicas!

Abraços.

Criado 18 de abril de 2010
Ultima resposta 19 de abr. de 2010
Respostas 4
Participantes 3