Converter SimpleDateFormat + Calendar + ResultSet

12 respostas
diegohsi

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

public List<Contato> 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;
	}
}

12 Respostas

nel

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.

diegohsi

Teria como jogar essa data pra um Calendar ?

nel

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?

diegohsi

O meu é contato.setDatanascimento(Calendar)

nel

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

diegohsi

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

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
		}
	}

}

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

nel

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!!!

diegohsi

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)

nel

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.

diegohsi

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

nel

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.

R

Podes resolver da seguinte forma.

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");

		}
	}
Criado 27 de abril de 2011
Ultima resposta 9 de mar. de 2012
Respostas 12
Participantes 3