Exibir data do banco no formato Brasileiro

14 respostas
J

[b]Boa Tarde pessoALL,

Estou com um problema em uma aplicação, tenho uma tela onde insiro valores do tipo data, no meu form essas datas estão do tipo String, e no meu VO, estão do tipo Date. Na hora de inserir, tranquilo, não ocorre nenhum problema, mas tenho uma funcionalidade que deve exibir um registro do meu banco, tenho um combo box, seleciono o elemento, e tenho 2 campos no jsp para exibir a data, data inicial e data final.

No momento que eu clico no elemento do combo ele exibe as datas corretamente, porém no formato do meu banco (yyyy-MM-dd) e gostaria de exibir nesse momento no padrão brasileiro (“dd-MM-yyyy”).

Estou usando Sruts I, e devo tratar isso no meu DAO, no momento de fazer o select na base, galera essa é minha dúvida, está tudo correto, porém queria fazer essa formatação no momento de exibir, apenas isso.

Obrigado
[]'s[/b]

14 Respostas

P

Se quizer formatar na view pode usar a tag fmt do jstl:

<fmt:formatDate value="${campoData}" pattern="dd-MM-yyyy" />
J

Entendi esse conceito mas eu gostaria mesmo de alterar direto no meu DAO, estou pensando em mudar meu select que hoje está bem simples, vou procurar alguma função Oracle para já trazer essa data formatada do meu banco, ae é só exibir…

Valeu!

M

Ola javaED !

Bom a melhor maneira é deixar a view(jsp) fazer essa formatação.
Mas falando em Oracle, vc pode usar a função to_date:

to_date( '06/01/2009 19:00:00', 'dd/mm/yyyy hh24:mi:ss' )

Mas não é uma boa prática, pensando - portabilidade - em poder aproveitar sua aplicação em outros bancos. Essa função não executa em outros bancos relacionais. Portanto pense bem antes de usa-la.

[ ]s,

E

Ow entao vc pode usar SimpleDateFormat.

//metodo para mostrar para o  usuario  
     public static String formatDateUser(String data){  
         SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");  
         Date d1 = null;  
         try {  
             d1 = f.parse(data);              
         } catch (Exception e) {  
             e.printStackTrace();  
         }  
           
         SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");  
           
         data = format.format(d1);  
           
         return data;         
           
     }
J

Valeu rapaziada,

Em relação ao banco de dados, realmente não é aconselhável usar “hard-code” devido a uma possível mudança do banco da minha aplicação. E realmente usando o SimpleDateFormat resolvi o meu problema, pelo menos em um teste aqui que eu fiz, no trampo verifico isso direitinho …

Obrigado pela ajuda de vcs!

J

Olá galera,

Ainda estou com um problema em relação ao esquema das datas, o problema está menor, ainda preciso mostrar a minha data no formato brasileiro ("dd/MM/yyyy") . No trecho :

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

Date dataIni = new Date();	

String dataIniStr = new String();

dataIniStr = formato.format(rs.getDate(1));
dataIni = formato.parse(dataIniStr);
groupVo.setDataInicioOfferGroup(dataIni);

... nesse trecho "dataIniStr = formato.format(rs.getDate(1));" recupero o valor exatamente do jeito que eu preciso no formato normal ("11/11/2005") por exemplo, só que o meu VO está tipado como DATE e NÃO como String, isso me causa o problema no momento de inserir no JSP e exibir na página pois como só posso setar um tipo Date, ele fica com a seguinte formatação :

"Fri Nov 11 00:00:00 GMT-03:00 2005" .

A dúvida é, sem mexer no VO, sem mexer no Form, e sem alterar jsp, existe algum meio de formatar para deixar no padrão brasileiro um objeto do tipo Date ???

Passando alguma formatação como parâmetro indicando que o meu objeto Date deve seguir a seguinte formatação ("dd/MM/yyyy");

Já procurei muito, mas consigo apenas formatação do tipo String, e na verdade preciso do contrário , recupero um Date do banco e preciso inserir na minha página com a formatação correta!

Obrigado

J

Desenterrando…

Até onde eu sei, o formato do Date é imutável, então você deve usar o SimpleDateFormat na hora de mostrar o dado ou seja, vc recupera como Date, faz tudo que precisa como Date e na hora de mostrar na tela você usa o SimpleDateFormat e coloca no formato que quiser.

No momento estou estudando uma forma de implementar um método pra mudar esse formato do tipo Date…

C
ebarros:
Ow entao vc pode usar SimpleDateFormat.
//metodo para mostrar para o  usuario  
     public static String formatDateUser(String data){  
         SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");  
         Date d1 = null;  
         try {  
             d1 = f.parse(data);              
         } catch (Exception e) {  
             e.printStackTrace();  
         }  
           
         SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");  
           
         data = format.format(d1);  
           
         return data;         
           
     }
como fasso pra aplicar isso no meu JFormattedTextField nomeado de tfrgdata querendo que traga os dados do Banco dd/MM/yyyy; vlw :!:
R

por padronização e estrututa eu aconselho a pegar o campo DATE como data mesmo e depois manusear no projeto. Convertendo Date do banco para String na query é a famosa “gambeta” ou “POG”

C

você pode me mostrar como faz isso?

R
javaEd.com:
Olá galera,

Ainda estou com um problema em relação ao esquema das datas, o problema está menor, ainda preciso mostrar a minha data no formato brasileiro ("dd/MM/yyyy") . No trecho :

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

Date dataIni = new Date();	

String dataIniStr = new String();

dataIniStr = formato.format(rs.getDate(1));
dataIni = formato.parse(dataIniStr);
groupVo.setDataInicioOfferGroup(dataIni);

... nesse trecho "dataIniStr = formato.format(rs.getDate(1));" recupero o valor exatamente do jeito que eu preciso no formato normal ("11/11/2005") por exemplo, só que o meu VO está tipado como DATE e NÃO como String, isso me causa o problema no momento de inserir no JSP e exibir na página pois como só posso setar um tipo Date, ele fica com a seguinte formatação :

"Fri Nov 11 00:00:00 GMT-03:00 2005" .

A dúvida é, sem mexer no VO, sem mexer no Form, e sem alterar jsp, existe algum meio de formatar para deixar no padrão brasileiro um objeto do tipo Date ???

Passando alguma formatação como parâmetro indicando que o meu objeto Date deve seguir a seguinte formatação ("dd/MM/yyyy");

Já procurei muito, mas consigo apenas formatação do tipo String, e na verdade preciso do contrário , recupero um Date do banco e preciso inserir na minha página com a formatação correta!

Obrigado

vc pode usar esse exemplo como mostrado pelo javaEd.com anteriormente para exibir o resultado e, quando aplicar no banco, utilize a mesma classe para converter de volta:

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

String dataIniStr = <string formatada com o formato dado no contrutor do SimpleDateFormat>

Date dataIni = formato.parse(dataIniStr);//Aqui vc tem a string formatada na classe java.util.Date

daí é só adicionar no banco normalmente

C

como posso encaixar aqui?

else if (acao.equals("alteracao")) {
            try {stam.executeUpdate("UPDATE TABPRI SET DESPRI = '" + tfDespri.getText() + "'," +
                        "POSPRI = " + tfPospri.getText() + ",RGCODUSU= " + tfrgcodusu.getText() + ", " +
                        "RGUSUARIO = " + tfrgusuario.getText() + ", RGDATA= '" + tfrgdata.getText() + "', " +
                        "RGEVENTO = " + tfegevento.getText() + " WHERE CODPRI = " + LCodpri.getText());
                } catch (SQLException ex) {
                ex.printStackTrace();
            }

isso awe é a janela Alterar que quando grava passa por esse UPDATE ai!

bom o usuário digita la no meu jFormatedTextField [color=green]tfrgdata[/color] dessa forma dd/MM/yyyy mais tem que armazenar yyyy/MM/dd.
Como encaixo ai?

R

colosos=colossus:
como posso encaixar aqui?

else if (acao.equals("alteracao")) {
            try {stam.executeUpdate("UPDATE TABPRI SET DESPRI = '" + tfDespri.getText() + "'," +
                        "POSPRI = " + tfPospri.getText() + ",RGCODUSU= " + tfrgcodusu.getText() + ", " +
                        "RGUSUARIO = " + tfrgusuario.getText() + ", RGDATA= '" + tfrgdata.getText() + "', " +
                        "RGEVENTO = " + tfegevento.getText() + " WHERE CODPRI = " + LCodpri.getText());
                } catch (SQLException ex) {
                ex.printStackTrace();
            }

isso awe é a janela Alterar que quando grava passa por esse UPDATE ai!

bom o usuário digita la no meu jFormatedTextField [color=green]tfrgdata[/color] dessa forma dd/MM/yyyy mais tem que armazenar yyyy/MM/dd.
Como encaixo ai?

Assim:

else if (acao.equals("alteracao")) {
            try {stam.executeUpdate("UPDATE TABPRI SET DESPRI = '" + tfDespri.getText() + "'," +
                        "POSPRI = " + tfPospri.getText() + ",RGCODUSU= " + tfrgcodusu.getText() + ", " +
                        "RGUSUARIO = " + tfrgusuario.getText() + ", RGDATA= '" + (new java.text.SimpleDateFormat("yyyy/MM/dd")).format((new java.text.SimpleDateFormat("dd/MM/yyyy")).parse(tfrgdata)) + "', " +
                        "RGEVENTO = " + tfegevento.getText() + " WHERE CODPRI = " + LCodpri.getText());
                } catch (SQLException ex) {
                ex.printStackTrace();
            }

Só que no seu caso… eu te indicaria usar o ParameterStatement que é mais fácil de manipular dados…

C
o stam que eu usei.

ta dando linha de erro " .format" e  "(tfrgdata))"

o stam que eu usei.

ta dando linha de erro " .format" e “(tfrgdata))”

Criado 15 de abril de 2009
Ultima resposta 28 de set. de 2009
Respostas 14
Participantes 7