Converter SimpleDateFormat + Calendar + ResultSet

Boa tarde Pessoal, sei que este tópico ja foi discutido várias vezes, mas ainda não encontrei a solução ou melhor, não consegui raciocinar tal conversão mesmo vendo todos esses tópicos, vou ser direto, muitos responderam utilizando classes diferentes, mas não é esse o caso, quero converter apenas SimpleDateFormat em Calendar. Tem 3 dias que estou tentando e não consigo, tenho pouco tempo por dia (rsrs). quero exibir a data formatada na tela como dd/mm/yyyy

[code]public List getLista() {

	List<Contato> contatos = new ArrayList<Contato>();
	
	try {
		//Preparando um statement para acessar o banco
		PreparedStatement stmt = this.connection.prepareStatement("select * from contatos");
		
		//executeQuery() retorna um ResultSet para iterar com a tabela
		ResultSet rs = stmt.executeQuery();
		
		while(rs.next()) {
			Contato contato = new Contato();
			
			//Passando os valores que estão na tabela para o objeto contato
			contato.setId(rs.getLong("id"));
			contato.setName(rs.getString("nome"));
			contato.setEmail(rs.getString("email"));
			contato.setEndereco(rs.getString("endereco"));
			
			//Formatando a data com patern SimpleDateFormat

			//Montando a data através de Calendar
			SimpleDateFormat dataformatada = new SimpleDateFormat("dd/MM/yyyy");
			dataformatada.
			Calendar data = dataformatada.getCalendar();
			data.setTime(rs.getDate("dataNascimento"));
			contato.setDataNascimento(data);
			
			contatos.add(contato);
		}
		stmt.close();
		rs.close();
		
	} catch(SQLException e) {
		new RuntimeException(e);
	}
	return contatos;
}

}[/code]

Oi!

Simples assim:

String data = new SimpleDateFormat("dd/MM/yyyy").format(seuCalendar.getTime());
System.out.println(data);

Só um detalhe, substitua isso Calendar data = dataformatada.getCalendar(); por isso Calendar data = Calendar.getInstance()

Abraços.

Teria como jogar essa data pra um Calendar ?

Claro.
Mas não era pegar a data de um Calendar e apresenta-la na tela como dd/MM/yyyy ?

Bom, de qualquer forma:

Date suaData = seuCalendar.getTime();

Era isso?

O meu é contato.setDatanascimento(Calendar)

Certo, e o que há de errado?!
Afinal, qual seu objetivo?! O que você gostaria!? Sua dúvida?! :slight_smile:

certo, tenho a classe que citei acima no inicio do tópico, e estou utilizando outra classe pra mostrar os dados na tela que é esta

[code]package br.com.caelum.jdbc.teste;

import java.util.ArrayList;
import java.util.List;

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

public class TestarGetLista {

public static void main(String[] args) {
	
	ContatoDAO dao = new ContatoDAO();
	List<Contato> contatos = dao.getLista();
	
	for(Contato c : contatos) {
		System.out.println("ID: " + c.getId());
		System.out.println("Nome: " + c.getName());
		System.out.println("Email: " + c.getEmail());
		System.out.println("Endereco: " + c.getEndereco());
		System.out.println("Data de Nascimento: " + c.getDataNascimento()); // Retorna um Calendar
	}
}

}
[/code]

porém não estou conseguindo exibir dd/mm/yyyy na data

Então champ, usa o que lhe disse acima, você tem um calendar ali certo?

Ó, aqui: System.out.println("Data de Nascimento: " + c.getDataNascimento()); // Retorna um Calendar

E eu disse:String data = new SimpleDateFormat("dd/MM/yyyy").format(seuCalendar.getTime());

Ao invés da variavél seuCalendar, coloque realmente o seu calendar, ou seja:

System.out.println("Data de Nascimento: " + new SimpleDateFormat("dd/MM/yyyy").format(c.getDataNascimento())); // Retorna um Calendar 

Certo? :slight_smile:
Abraços!!!

Cara, valeu d+ pela atenção, desculpe a minha ignorância em java, eu estava tentando alterar no método getLista(); só agora me toquei …
Obrigado novamente pela atenção e paciência rsrsrsrs
Mais esta lançando so na exibição da data

Exception in thread "main" java.lang.IllegalArgumentException: Cannot format given Object as a Date at java.text.DateFormat.format(DateFormat.java:281) at java.text.Format.format(Format.java:140) at br.com.caelum.jdbc.teste.TestarGetLista.main(TestarGetLista.java:22)

Que isso cara, fique tranquilo.

Tens certeza que está armazenando um Calendar?
Só um detalhe, minha memória pode estar enganada, mas ao que sei, o ResultSet retorna um java.sql.Date e não um java.util.Date, que é o parametro que o calendar usa no set.

Tente, isso:

Calendar data = Calendar.getInstance();
java.sql.Date bornDate = rs.getDate("dataNascimento"));   
data.setTime(new java.util.Date(bornDate.getTime()));
contato.setDataNascimento(data); 

Creio que isso resolva.
Abraços.

o problema é na formatação do println(), se eu deixar apenas c.getDataNascimento() retorna a data normalmente porém com tudo que tem direito no Calendar

Certo.
Diego, você leu com atenção meus posts anteriores?

Reveja, acima eu lhe mostrei como apresentar no console a data formatada, depois você postou uma Exception, em seguida fiz outro post com um trecho de código que deve ser modificado no que você fez, o intuito do trecho de código é justamente solucionar o problema da Exception. Pois repito, acredito que o problema tenha sido pelo fato de você não ter atribuido corretamente o objeto ao Calendar e quando executa o getTime(), traz um objeto diferente do java.util.Date.

Tente o código que lhe apresento anteriormente e post o resultado.
E por favor, poste o código que está utilizando, desde o momento em que preenche o seu objeto até o que executa o System.out.println.

Abraços.

Podes resolver da seguinte forma.

[code]
public static void main(String[] args) {

	ContatoDAO dao = new ContatoDAO();

	List<Contato> contatos = dao.getLista();

	SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

	for (Contato contato : contatos) {

		System.out.println("Nome: " + contato.getNome());
		System.out.println("E-mail: " + contato.getEmail());
		System.out.println("Endereço: " + contato.getEndereco());
		System.out.println("Data de nascimento: "
				+ sdf.format(contato.getDataNascimento().getTime()) + "\n");

	}
}[/code]