[RESOLVIDO]Problemas com manipulação de datas

9 respostas
AndreMendes

Para manipular uma determinada data, criei dois métodos, que são:

public Date getDataDeAniversarioFormatada(); //retorna uma data no formado dd/MM/yyyy

public Date getDataDeAniversarioBanco(); //retorna uma data no formado yyyy-dd-mm (acho que esse é o padrao do banco)

A intenção é ter acesso rapido as datas para persisti-las no banco, mas também ter como exibi-las no formato comercial brasileiro. Tem alguma forma de melhorar essa POG ?

9 Respostas

pmlm

Nenhum desses métodos te devolve uma data formatada mas sim um objecto Date.
Uma “data formatada” é uma String (e não um Date) com uma representação do valor da data num formato definido.

AndreMendes

No corpo do método, eu uso o SimpleDateFormat para formatar as datas de acordo com a minha necessidade. Retornei um Date, pois sempre me falaram que quando se quer trabalhar com uma data use a classe Date, e não uma String que contém a data! Isso facilita também na hora de usar o PreparedStatement, pois ele usa um objeto sql.Date. Estou certo ?

pmlm

Mas um objecto Date não é formatado.

Sim, deves usar um objeto Date e só quando vais mostrar para o utilizador o valor é que deves fazer o format. Da mesma forma, assim que recolhes uma data do utilizador a deves passar para Date.

Algo como

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

(...)

//preencher um campo de texto com uma data da BD
myTextFileld.setText(df.format(myBean.getMyDate())):


(...)

//obter um campo de texto do utilizador para gravar na BD
myBean.setMyDate(df.parse(myTextField.getText()));

(...)

O campo “myDate” é do tipo Date e não tens de te preocupar com o formato da BD já que se usares preparedStatement, ele se encarrega disso.

AndreMendes

pmlm:
Mas um objecto Date não é formatado.

Sim, deves usar um objeto Date e só quando vais mostrar para o utilizador o valor é que deves fazer o format. Da mesma forma, assim que recolhes uma data do utilizador a deves passar para Date.

Algo como

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

(...)

//preencher um campo de texto com uma data da BD
myTextFileld.setText(df.format(myBean.getMyDate())):


(...)

//obter um campo de texto do utilizador para gravar na BD
myBean.setMyDate(df.parse(myTextField.getText()));

(...)

O campo “myDate” é do tipo Date e não tens de te preocupar com o formato da BD já que se usares preparedStatement, ele se encarrega disso.

Então você quer dizer que, na hora que minha aplicação executar o myBean.getDate, não estará formatado, pois date não é formatado ?
PreparedStatement prepara as datas no formato do banco ?

pmlm

AndreMendes:

Então você quer dizer que, na hora que minha aplicação executar o myBean.getDate, não estará formatado, pois date não é formatado ?
PreparedStatement prepara as datas no formato do banco ?

Exactamente.

AndreMendes

Então preciso de uma dica! É melhor que minha classe defina as datas de uma forma mais vaga, do tipo:

Date dataDeHoje = new Date();

E na aplicação:

SimpleDateFormat spf = new SimpleDateFormat("dd/MM/yyyy");
spf.format(myBean.getDataDeHoje());

O que vocês acham ? Devo fazer o inverso ?

AndreMendes

O inverso que eu digo, é definir data como uma String, e na aplicação converte-la para uma data, quando necessario…

pmlm

Uma data é um Date. Só deve ser formatada como String para mostrar ao utilizador.

AndreMendes

Certo. Reforçou o que eu já tinha lido e visto por ai! Muito obrigado. Problema resolvido.

Criado 18 de agosto de 2010
Ultima resposta 18 de ago. de 2010
Respostas 9
Participantes 2