Formatando data com SimpleDateFormat

Pessoal boa noite!
Sei que esse assunto é velho e que tem muitas soluçãoes, mais sou iniciante em Java e estou com essa dificuldade

O que eu tenho em código seria:

ContatoDAO

package br.com.caelum.jdbc.dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import br.com.caelum.jdbc.ConnectionFactory;
import br.com.caelum.jdbc.modelo.Contato;

public class ContatoDAO{

	//a conexão com o banco de dados
	private Connection connection;
	
	public ContatoDAO(){
		
		this.connection = new ConnectionFactory().getConnection();
		
	}
	
	public void adiciona(Contato contato){
		
		String sql = "insert into Contatos (nome, email, endereco, dataNascimento) values (?,?,?,?)";
		
		try{
			
			//prepared statmente para inserção
			PreparedStatement stmt = connection.prepareStatement(sql);
			
			//seta valores
			stmt.setString(1, contato.getNome());
			stmt.setString(2, contato.getEmail());
			stmt.setString(3, contato.getEndereco());
			stmt.setDate(4, new Date(contato.getDataNascimento().getTimeInMillis()));
			
			//executa
			stmt.execute();
			stmt.close();
		
		}catch(SQLException e){
			throw new RuntimeException(e);
		}
		
	}
	
	public List<Contato> getListaTudo(){
		
		String sql = "select * from Contatos";
		
		try{
			List<Contato> contatos = new ArrayList<Contato>();
			PreparedStatement stmt = this.connection.prepareStatement(sql);
			ResultSet rs = stmt.executeQuery();
			
			while(rs.next()){
				//Criamo um objeto do tipo contato
				Contato contato = new Contato();
				contato.setNome(rs.getString("nome"));
				contato.setEmail(rs.getString("email"));
				contato.setEndereco(rs.getString("endereco"));
				
				//Montando a data através do Calendar
				Calendar data = Calendar.getInstance();
				data.setTime(rs.getDate("dataNascimento"));
				contato.setDataNascimento(data);
				
				//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx
				//O que eu tenho que fazer aqui para formatar a data acima?
				//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
				
								
				
				contatos.add(contato);
			}
			
			rs.close();
			stmt.close();
			return contatos;
			
		}catch(SQLException e){
			throw new RuntimeException(e);
		}
		
	}
	
	public void altera(Contato contato){
		
		String sql = "update Contatos set nome=?, endereco=?, email=?, dataNascimento=? where id=? ";
		
		try{
			
			PreparedStatement stmt = connection.prepareStatement(sql);
			stmt.setString(1, contato.getNome());
			stmt.setString(2, contato.getEndereco());
			stmt.setString(3, contato.getEmail());
			stmt.setDate(4, new Date(contato.getDataNascimento().getTimeInMillis()));
			stmt.execute();
			stmt.close();
			
		}catch(SQLException e){
			
			throw new RuntimeException(e);
			
		}
	}
	
	public void remove(Contato contato){
		String sql = "delete from Contatos where id=?";
		
		try{
			
			PreparedStatement stmt = connection.prepareStatement(sql);
			stmt.setLong(1, contato.getId());
			stmt.execute();
			stmt.close();
			
		}catch(SQLException e){
			
			throw new RuntimeException(e);
			
		}
		
	}
}

Classe modelo

package br.com.caelum.jdbc.modelo;

import java.util.Calendar;

public class Contato {

	private Long id;
	private String nome;
	private String email;
	private String endereco;
	private Calendar dataNascimento;
	
	public Long getId() {
		return id;
	}
	
	public void setId(Long id) {
		this.id = id;
	}
	
	public String getNome() {
		return nome;
	}
	
	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public String getEmail() {
		return email;
	}
	
	public void setEmail(String email) {
		this.email = email;
	}
	
	public String getEndereco() {
		return endereco;
	}
	
	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}
	
	public Calendar getDataNascimento() {
		return dataNascimento;
	}
	
	public void setDataNascimento(Calendar dataNascimento) {
		this.dataNascimento = dataNascimento;
	}
	
}

Classe de teste

package br.com.caelum.jdbc.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.getListaTudo();
		
		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 Nascimento: " + contato.getDataNascimento().getTime() + "\n");
		}
		
	}
}

Na Classe contatoDAO no método getListaTudo marquei onde eu tenho que fazer a formação

O que eu estava tentando era

Calendar data = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
data.setTime(rs.getDate("dataNascimento"));
Date date = (Date) data.getTime();

Só que sempre da algum erro

Alguém pode me ajudar?

Oi freitasgts,

Da uma olhadinha aqui http://www.guj.com.br/article.show.logic?id=8

Exemplos:


 GregorianCalendar thisday = new GregorianCalendar();
      Date d = thisday.getTime();
      DateFormat df = DateFormat.getDateInstance();
      String s = df.format(d);
      //System.out.println("Hoje é " + s);
        lb_datave.setText(s);

                Calendar data = Calendar.getInstance();   
                SimpleDateFormat format=new SimpleDateFormat("dd/MM/yyyy");
                String h=format.format(data.getTime());

Como vc disse existe várias formas de fazer,vc pode usar a pesquisa do forum…

Boa sorte!

1 curtida

No seu modelo, troque o Calendar da dataNascimento para java.util.Date

De java.sql.Date para java.util.Date:

contato.setDataNascimento(new SimpleDateFormat("yyyy-MM-dd").parse(rs.getString("dataNascimento")));

eu fiz assim e funcionou! :slight_smile:

Tem varias formas de se fazer, eu para ficar evitando trabalho com isso eu criei uma classe Utilitaria chamada DateFormat para fazer aquilo que eu sempre preciso fazer com as datas, se interessar dá uma olhadinha:
http://code.google.com/p/opensutils-br4j/wiki/DateFormat

O Projeto chama-se: Opensutils-br4j
Download em: http://code.google.com/p/opensutils-br4j/downloads/list

Olá pessoa, tudo bem?

Gostaria de agradecer a todos pela atenção!

Vou tentar solucionar o problema com as soluções que me passaram.

E queria deixar meus parabéns a todos pelo empenho…

Att.
Thiago Maria Freitas