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 ?
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:
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");
}
...
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.
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