SimpleDateFormat com a interface Calendar

Eu construir um método sobrecarregado toString() para listar o modelo. Estou utilizando um campo de data de nascimento. Quando adiciono o campo no PostgreSQL utilizando o parseamento da Classe SimpleDateFormat funciona, mas quando tento fazer a leitura, não consigo. Segue o codigo abaixo e o erro:

@Override
	public String toString() {
		try {
			String contatos = "\nNome: " + this.nome;
			contatos += "\nEmail: " + this.email;
			contatos += "\nEndereço: " + this.endereco;

			SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
			Date data = (Date) sdf.parse(this.dataNascimento.toString());
			Calendar calendar = Calendar.getInstance();
			calendar.setTime(data);

			contatos += "\nData de nascimento: " + calendar.toString();
			return contatos;
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return null;
	}

Classe de teste

import java.util.List;

import br.com.caelum.jdbc.dao.ContatoDao;
import br.com.caelum.jdbc.modelo.Contato;

public class TestaLista {
	public static void main(String[] args) {
		ContatoDao dao = new ContatoDao();
		List<Contato> contatos = dao.getLista();

		contatos.forEach((c) -> System.out.println(c.toString()));
	}
}

O erro que o Java exibe para mim…

java.text.ParseException: Unparseable date: "java.util.GregorianCalendar[time=202273200000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT-03:00",offset=-10800000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=1976,MONTH=4,WEEK_OF_YEAR=23,WEEK_OF_MONTH=6,DAY_OF_MONTH=30,DAY_OF_YEAR=151,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=5,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=-10800000,DST_OFFSET=0]"
	at java.base/java.text.DateFormat.parse(Unknown Source)
	at br.com.caelum.jdbc.modelo.Contato.toString(Contato.java:65)
	at br.com.caelum.jdbc.teste.TestaLista.lambda$0(TestaLista.java:13)
	at java.base/java.util.ArrayList.forEach(Unknown Source)
	at br.com.caelum.jdbc.teste.TestaLista.main(TestaLista.java:13)
null
java.text.ParseException: Unparseable date: "java.util.GregorianCalendar[time=255236400000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT-03:00",offset=-10800000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=1978,MONTH=1,WEEK_OF_YEAR=5,WEEK_OF_MONTH=1,DAY_OF_MONTH=2,DAY_OF_YEAR=33,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=-10800000,DST_OFFSET=0]"
	at java.base/java.text.DateFormat.parse(Unknown Source)
	at br.com.caelum.jdbc.modelo.Contato.toString(Contato.java:65)
	at br.com.caelum.jdbc.teste.TestaLista.lambda$0(TestaLista.java:13)
	at java.base/java.util.ArrayList.forEach(Unknown Source)
	at br.com.caelum.jdbc.teste.TestaLista.main(TestaLista.java:13)
java.text.ParseException: Unparseable date: "java.util.GregorianCalendar[time=1132542000000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT-03:00",offset=-10800000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2005,MONTH=10,WEEK_OF_YEAR=48,WEEK_OF_MONTH=4,DAY_OF_MONTH=21,DAY_OF_YEAR=325,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=3,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=-10800000,DST_OFFSET=0]"
	at java.base/java.text.DateFormat.parse(Unknown Source)
	at br.com.caelum.jdbc.modelo.Contato.toString(Contato.java:65)
	at br.com.caelum.jdbc.teste.TestaLista.lambda$0(TestaLista.java:13)
	at java.base/java.util.ArrayList.forEach(Unknown Source)
	at br.com.caelum.jdbc.teste.TestaLista.main(TestaLista.java:13)
null
null

Preciso de um auxilio em relação a isso. Desde já agradeço!

O que tem nessa linha?

o erro deve ta no metodo sobrescrito!, resta saber qual é a linha 65 que ta dentro desse metodo

Conteúdo da linha 65…
erro

o problema tá que ocorrendo na linha 65 é que ele tá tentando converter o atributo dataNascimento do tipo GregorianCalendar para Date, que na realidade esta passando um toString do GregorianCalendar e esta tentando converter essa string

Você teria uma ideia de como posso converter de GregorianCalendar para String, para jogar no HTML, JTextField ou seja Views que recebem String?

Ao inves desse código acima, substitui por esse:

    SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
    String data = format.format(dataNascimento.getTime());  
    
    contatos += "\nData de nascimento: " + data;
    return contatos;
1 curtida

será que não é isso que vc quer fazer ?
contatos += "\nData de nascimento: " + sdf.format(this.dataNascimento)

tb serve

Isso mesmo! Resolveu meu problema. Muito obrigado a todos.

Qual o tipo de dado da variável dataNascimento?

private Calendar dataNascimento;