Duvida Date

O meu código está dando este erro:

Exception in thread “AWT-EventQueue-0” java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Date
at GUI.FrmAluno.atualizaTextArea(FrmAluno.java:330)

String matricula = (String) jTable1.getModel().getValueAt(linhaSelecionada, 0);
            String nome = (String) jTable1.getModel().getValueAt(linhaSelecionada, 1);
            Date dtnascimento = (Date) jTable1.getModel().getValueAt(linhaSelecionada, 2); // LINHA 330 - NESTA LINHA

O QUE PODE SER?

Você não pode converter (casting) de um tipo diretamente para outro. A única exceção a isso são classes com herança e entre tipos primitivos numerais. Exemplo:

double valorDouble = 3.14;
int valorInteiro = (int) valorDouble;

O código acima funciona. Mas, no seu caso, você quer converter de um String para um Date. O casting não funciona assim. Para fazer o que você quer, tem que usar uma classe que faça essa conversão.

Veja um exemplo de um post aqui mesmo do GUJ:

Mais simples que isso, impossível. O próprio erro te diz o que está ocorrendo, em outras palavras “não posso converter um tipo String para um tipo Date”.
Você tem que fazer a conversão “manualmente”, ou seja, em código.

Isso: jTable1.getModel().getValueAt(linhaSelecionada, 2) retorna uma String e não um Date :slight_smile:

Eu usei o :

public static Date formataData(String data) throws Exception {     
        if (data == null || data.equals(""))    
            return null;    
            
        Date date = null;    
        try {    
            DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");    
            date = (java.util.Date)formatter.parse(data);    
        } catch (ParseException e) {                
            throw e;    
        }    
        return date;    
    }   

E no código onde era o :

Date dtnascimento = (Date) jTable1.getModel().getValueAt(linhaSelecionada, 3);

Mudei para:

DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); 
Date dtnascimento = null;
            try {
                dtnascimento = (Date) formatter.parse((String) jTable1.getModel().getValueAt(linhaSelecionada, 2));
            } catch (ParseException ex) {
                Logger.getLogger(FrmAluno.class.getName()).log(Level.SEVERE, null, ex);
            }

Só que a data está voltando para mim como NULL:

E aparece esse erro:

Abr 05, 2013 3:47:22 PM GUI.FrmAluno atualizaTextArea
SEVERE: null
java.text.ParseException: Unparseable date: “2013-04-05”
at java.text.DateFormat.parse(DateFormat.java:357)
at GUI.FrmAluno.atualizaTextArea(FrmAluno.java:347)

O que pode ser agora?

O formato que você está recebendo é “yyyy-MM-dd”.

Tente mudar de:

DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");

Para:

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

O erro sumiu só que fica assim Wed Apr 03 00:00:00 BRT 2013, não teria como deixar formato DD/MM/AAAA?

Ola,

Veja se consegue entender, você precisa converter duas vezes, a primeira o format é do mesmo tipo que esta recebendo e a segunda do tipo que quer que fique.

	public static void main(String[] args) throws ParseException {
		String data1 = "2013-01-01";
		DateFormat dfOne = new SimpleDateFormat("yyyy-MM-dd");
		DateFormat dfTwo = new SimpleDateFormat("dd/MM/yyyy");
		
		Date date2 = dfOne.parse(data1);
		
		String finalDate = dfTwo.format(date2);
		
		System.out.println(finalDate);

	}

:slight_smile:

DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
DateFormat format2 = new SimpleDateFormat("dd/MM/yyyy");
Date dtnascimento = null;
try {
    dtnascimento = (Date) format1.parse("2013-04-05");
    System.out.println(format2.format(dtnascimento));
} catch (ParseException ex) {
    System.out.println(ex.getMessage());
}

Edit: É…a mesma coisa que o rtva disse.

Como eu passo o formatter.parse nesse código: ?

aluno.setDtnascimento(txtDtnascimento.getDate());