Erro ao tentar compar ano de um objeto com o ano da data do sistema

Pessoal,

Estou enfrentando a seguinte situação : em um sistema de controle acadêmico, necessito comparar o ano de um objeto, com o ano corrrente.
Se o valor do ano obtido através do método obj.getAno() + 5 anos adiante for menor do que o ano da data do sistema, devo bloquear uma ação.
Segue o código :

if (obj.getAno() + 5 > hoje.getYear() )  {
			
JOptionPane.showMessageDialog(null, "Ano Aprov. : "+ obj.getAno());
JOptionPane.showMessageDialog(null, "Ano Atual : "+ hoje.getYear());
addMensagemErro("Ano: Não é possível realizar aproveitamento de créditos cursados há mais de 5 anos");
			
}

O método hoje.getYear está retornando “112” em vez de 2012.
Alguém pode me dizer o que está acontecendo ?
Outro detalhe é que este método está depracated, que outra classe e/ou método eu poderia utilizar para sair do depracted ?

getYear() tem de ser somado a 1900. É uma herança da linguagem C, portanto é por isso que está “deprecated”.

Você precisa converter o java.util.Date em um java.util.Calendar, e usar o método get (Calendar.YEAR) para pegar o ano.

Essa conversão requer um cast explícito ? Existe algum método que já faz diretamente ?
Agradece,

Max Carvalho

Repita comigo: cast não faz conversão - exceto em um caso muito raro, que é o cast que se usa para transformar um tipo primitivo em outro. Por exemplo, int i = 10; double d = (double) i;

Repita mais uma vez: Cast não faz conversão.

Repita mais uma vez ainda: Cast não faz conversão.

Repita mais uma vez ainda e ainda e ainda: Cast não faz conversão.

Depois da sessão de doutrinação, para converter um Date para um Calendar, você teria de fazer isso:

Date d = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime (d);

No seu caso (em que você só quer pegar a data atual do sistema, você não precisa criar um new Date(). Você só precisaria usar:

Calendar cal = Calendar.getInstance();

Infelizmente ainda não deu certo, o cal.YEAR está retornando sempre 1 para o ano.

Segue o trecho de código

...
Date d = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(d);
...
if (obj.getAno() + 5 > cal.YEAR)  { // este trecho está retornando sempre 1 para o ano, inviabilizando a lógica deste if
			
JOptionPane.showMessageDialog(null, "Ano Aprov. : "+ obj.getAno());
JOptionPane.showMessageDialog(null, "Ano Atual : "+ cal.YEAR);
addMensagemErro("Ano: Não é possível realizar aproveitamento de créditos cursados há mais de 5 anos");
		
}
...

Cadê essa parte do código ? :slight_smile:
Você fez “cal.YEAR”, por isso o erro.

Experimenta fazer:

cal.get(Calendar.YEAR);

E agora que eu vi isso:

Date d = new Date();  
Calendar cal = Calendar.getInstance();  
cal.setTime(d);  

Não faz o menor sentido. Se tu usar apenas o Calendar.getInstance() já lhe retorna a data atual, portanto, usar o setTime aplicando um java.util.Date é totalmente sem sentido, considerando que tu quer a data atual. Resumindo:

Date d = new Date(); Calendar cal = Calendar.getInstance(); // são exatamente a mesma coisa (pode alterar um milesimo de segundo, mas tu entendeu). cal.getTime() == d

Ps: não se usa == para comparar objetos, fiz com intuito didático.

Estou tentando usar o seguinte código

private Collection<MensagemAviso> validarDados() {
...
    if (cal.get(obj.getAno()) + 5 > cal.get(cal.YEAR))  {
			
       System.out.println("Ano Aprov." + cal.get(obj.getAno()) );
       System.out.println("Ano Aprov." + cal.get(cal.YEAR) );
			
       addMensagemErro("Ano: Não é possível realizar aproveitamento de créditos cursados há mais de 5 anos");
    }
			
}

E está sendo lançada a seguinte exceção

java.lang.ArrayIndexOutOfBoundsException: 2004 at java.util.Calendar.internalGet(Calendar.java:1146) at java.util.Calendar.get(Calendar.java:1133) at br.ufrn.sigaa.ensino.stricto.jsf.AproveitamentoCreditoMBean.validarDados(AproveitamentoCreditoMBean.java:157) at br.ufrn.sigaa.ensino.stricto.jsf.AproveitamentoCreditoMBean.cadastrar(AproveitamentoCreditoMBean.java:224) at 

cara,

obj.getAno()

isso já te retorna o ano que vc quer né?

então experimenta fazer assim

if (obj.getAno() + 5 > cal.get(cal.YEAR))