ResultSet e SimpleDataFormtat

Olá!

Estou alguns dias brigando com um desafio que obtive na apostila da Caelum, que indica este forum para consultas.

Bem no inicio da apostila, é mostrado como usar o Resultset para fazer uma consulta ao banco de dados. Este result set trás um horário que foi gerado com getTimeInMillis da classe Date, ou seja, um horário totalmente ilegível.

O desafio seria usar a classe SimpleDateFormat neste Resultset e gerar uma data bonitinha (“dd/MM/yyyy”). Já consegui transformar a consulta em uma em uma string e usar o método applyPattern do SimpleDateFormat. O problema é que preciso transformar isso para Calendar para inserir no meu formulário.


import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.Calendar;

/* a classe contato possui as variáveis da tabela contatos e está encapsulada pelos 
 * métodos get and set */

public class Contact {
	
	private String name;
	private String email;
	private String adress;
	private Calendar birthday;
	
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getAdress() {
		return adress;
	}
	public void setAdress(String adress) {
		this.adress = adress;
	}
	public Calendar getBirthday() {
		return birthday;
	}
	public void setBirthday(Calendar date) {
		this.birthday = date;
	}
	
	
	
}
[code]	public List<Contact> getList() {
	
	
	
	try{
		List<Contact> contacts = new ArrayList<Contact>();
		PreparedStatement stmt = this.connection.prepareStatement("select * from contact");
		ResultSet rs = stmt.executeQuery();
		
		while(rs.next()){
			//criando objeto contato
			Contact contact = new Contact();
			contact.setName(rs.getString("name"));
			contact.setAdress(rs.getString("adress"));
			contact.setEmail(rs.getString("email"));
			
			//formatando a data
			Calendar date = Calendar.getInstance();
			date.setTime(rs.getDate("birthday"));
			contact.setBirthday(date);
			
		//inserindo  contatos na lista
		contacts.add(contact);
		}
		rs.close();
		stmt.close();
		return contacts;
	}
	catch(SQLException e){
		throw new RuntimeException(e);			
	}
}[/code]

Alguém pode me dar uma luz?

Obrigado!

Como disse, passei alguns dias tentando solucionar o problema. Verifiquei todos os tópicos já abertos sobre isto, mas não foi possível solucionar a dúvida.

[quote=Pablo Parada]…

O problema é que preciso transformar isso para Calendar para inserir no meu formulário.

[code]// …

//formatando a data
Calendar date = Calendar.getInstance();
date.setTime(rs.getDate(“birthday”));
contact.setBirthday(date);

// …[/code][/quote]

você fez isso corretamente.

acho que não entendi qual é o problema. poderia explicar melhor?

vc pode fazer no seu model o seguinte metodo

public String getBirthDayFormated(){
    return new SimpleDateFormat("dd/MM/yyyy").format(birthday.getTime());
}

Acho que é isso que vc quer.

[code] # //formatando a data

Calendar date = Calendar.getInstance();

date.setTime(rs.getDate(“birthday”));

contact.setBirthday(date); [/code]

Como aplico o SimpleDateFormat no “date”?

o amigo Felagund deu a dica.

o método SimpleDateFormat.format() retorna uma String, e não há como atribuir um objeto do tipo String a um do tipo Calendar.

Sim, passei dias tentando fazer algumas conversões com parse() e format(). A dúvida é : é possível eu deixar esta data no formato dd/MM/yyyy? Se sim, poderei salvar esta data em um tipo Calendar? Como eu faço?

agora ficou mais claro!

sim, você pode deixar a data no formato dd/MM/yyyy, mas não pode armazená-la em um tipo Calendar, porque o retorno de SistemDateFormat.format() é um tipo String.

o ideal é que formate a data no momento de exibir na tela, ou tenha um método como o sugerido pelo amigo Felagund e o chame nesse momento.

e ao capturar a data digitada pelo usuário, faça um parse de String para Date e depois para Calendar. lembrando que o formato da data digitado pelo usuário deve se identico ao formato passado para SimpleDateFormat.

um exemplo:

[code]import java.text.*;
import java.util.Calendar;

public class PessoaTeste {
public static void main(String[] args) {
Calendar dataNascimento = Calendar.getInstance();

    try {
        dataNascimento.setTime(new SimpleDateFormat("dd/MM/yyyy").parse("10/03/2010")); // supondo que o usuário digitou isso e o programa capturou de alguma forma
    } catch (ParseException e) {
        e.printStackTrace();
    }
    Pessoa p = new Pessoa("Fulano", dataNascimento);
    System.out.println(p.getNome() + " nasceu em " + p.getDataNascimentoString());
}

}

class Pessoa {
private String nome;
private Calendar dataNascimento;

public Pessoa(String nome, Calendar dataNascimento) {
    this.nome = nome;
    this.dataNascimento = dataNascimento;
}

public String getNome() {
    return nome;
}

public Calendar getDataNascimento() {
    return dataNascimento;
}

public String getDataNascimentoString() {
    return new SimpleDateFormat("dd/MM/yyyy").format(dataNascimento.getTime());
}

}[/code]

Obrigado, era isso que eu gostaria!