Erro ao tentar compar ano de um objeto com o ano da data do sistema
9 respostas
M
max.carvalho
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 :
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.
M
max.carvalho
Essa conversão requer um cast explícito ? Existe algum método que já faz diretamente ?
Agradece,
Max Carvalho
E
entanglement
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:
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:
Calendarcal=Calendar.getInstance();
M
max.carvalho
Infelizmente ainda não deu certo, o cal.YEAR está retornando sempre 1 para o ano.
Segue o trecho de código
...Dated=newDate();Calendarcal=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 ifJOptionPane.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");}...
nel
Cadê essa parte do código ?
Você fez “cal.YEAR”, por isso o erro.
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.