SimpleDateFormat com a interface Calendar

11 respostas Resolvido
programaçãojava
wsilvaasc

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!

11 Respostas

darlan_machado

O que tem nessa linha?

V

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

wsilvaasc

Conteúdo da linha 65…
erro

jacoboliveira

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

wsilvaasc

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

jacoboliveira
Solucao aceita

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;
V

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

V

tb serve

wsilvaasc

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

staroski

Qual o tipo de dado da variável dataNascimento?

wsilvaasc

private Calendar dataNascimento;

Criado 24 de janeiro de 2018
Ultima resposta 25 de jan. de 2018
Respostas 11
Participantes 5