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]
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.
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?
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.
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());
}