Problema com máscara de datas

8 respostas
aquilante

Senhores uma ajuda!

Quero converter uma data para uma máscara.

String teste = hist.getDataHoraTransmissao().toString(); // teste recebe "2008-03-14 07:52:11.0"
Date data = DateHelper.parseDate("yyyy-MM-dd HH:mm:ss", teste);
hist.setDataHoraTransmissao(data);

Class DateHelper

public static Date parseDate(String pattern, String value) throws ParseException {
SimpleDateFormat formatter = new SimpleDateFormat(pattern, new Locale("pt", "BR"));  
return (value == null) ? null : formatter.parse(value);
}

não estou conseguindo converter para a máscara “yyyy-MM-dd HH:mm:ss”. Ta me retorndo essa máscara “Sat Feb 02 08:58:02 GMT-03:00 2008” . Pq?

vlwss! :lol:

8 Respostas

P

Isto acontece porque o metodo formatter.parse(value) retorna um tipo java.util.Date para resolver seu problema basta você formatar seu objeto Date.

O Codigo ficaria assim:

public static String parseDate(String pattern, String value) throws ParseException {   
SimpleDateFormat formatter = new SimpleDateFormat(pattern, new Locale("pt", "BR"));     
java.util.Date data = formatter.parse(value);
String data_formatada = formatter.format(data);
return data_formatada;   
}
String teste = hist.getDataHoraTransmissao().toString(); // teste recebe "2008-03-14 07:52:11.0"   
String data = DateHelper.parseDate("yyyy-MM-dd HH:mm:ss", teste);   
hist.setDataHoraTransmissao(data);

Você precisa mudar o retorno de sua classe para String porque o metodo formatter.format(value) retorna uma String.

abçs

aquilante

pois é cara, mas o pro é q eu n posso retornar uma string. O método setDataHoraTransmissao recebe uma data como parâmetro. Da forma que eu to fazendo, n da erro, so que n exibe na máscara q eu quero.
qdo eu faço:

Date data = DateHelper.parseDate("yyyy-MM-dd HH:mm:ss", teste);

na conversão muda a mascara, essa é a questão.

??

:lol:

P

voce nao consegue mudar o parametro do metodo setDataHoraTransmissao para String?

o problema de você usar o tipo Date é que seu formato é “Sat Feb 02 08:58:02 GMT-03:00 2008”.

aquilante

Seria um retrabalho grande, pois esse método está em uso em outras aplicações. E na verdade ele é uma data mesmo, acredito ta certo. Será q n tem uma alternativa menos drástica?

Vlwss! :cry:

P

Porque voce precisa da data no formato “yyyy-MM-dd HH:mm:ss” é para gravar no banco. Se for apenas para isso você pode deixar seu codigo como está e somente na hora em que for inserir no banco voce usa o metodo format(valor) no seu objeto Date. Isto simplificaria para você não precisar alterar o método todo.

Caso não seja isso, você ja ouviu falar de Polimorfismo? Na linguagem java você pode ter metodos com o mesmo nome mas com escopo difirente.

exemplo:

public static void setDataHoraTransmissao(Date data){
  //seu codigo aqui
}

public static void setDataHoraTransmissao(String data){
  //seu codigo aqui
}

Isto não afetaria as outras aplicações que já usam o método pois a liguagem se encarrega de chamar o método correto.

E caso de nem uma das opções acima resolva seu problema, crie um novo método que utilize String como parametro para fazer o que você precisa.

abçs

aquilante

Na verdade é para apresentação em um tabela. Pra camada de visualização, no meu jsp

<display:column title="Data/Hora(GPS)" property="dataHoraTransmissao" style="text-align: center; white-space: nowrap;" />

Eu ja tentei sobreescrever o métoso, mas n deu certo tb.
Na camada de visão, usando display tag tem como eu formatar essa máscara?

vlwss! :lol:

alexlima72

Colega,

Pesquise aqui no Guj mesmo sobre FormatDateCalendar ou GregorianCalendar que vc vai encontrar muitos tópicos…
Tem muito material legal sobre as particularidade de Datas inclusive para buscar direto dos Bancos de Dados etc…

Valeu espero ter ajudado

baudamix
Se for só para esse projeto e vc tiver a liberdade de criar classes faz uma ""composição+""decorator. - Cria uma classe que ira decorar essa sua classe principal ex.: sua classe q formata data. - Nessa classe decoradora vc ira passar usa classe principal através do construtor da classe decorador e escreve o método da classe principal na classe decoradora.
//O eclipse e o netBeans fazem isso automático
- O método parseDate vc muda o retorno para string e usa nessa tela que vc precisa...

o exemplo explica melhor

ex.:

Class ClasseFormata() {
  
  public static String parseDate(String pattern, String value) throws ParseException {     
    SimpleDateFormat formatter = new SimpleDateFormat(pattern, new Locale("pt", "BR"));       
    java.util.Date data = formatter.parse(value);  
    String data_formatada = formatter.format(data);  
    return data_formatada;     
  }  
   public void outroMetodo(){
     // qualquer coisa
   }

   // os outros metodos...
}
// classe decorada
Class classeFormataDecorada() {
  
  private ClasseFormata classeFormata;

  classeFormataDecorada(ClasseFormata classeFormata){
     this.classeFormata = classeFormata;
  }

  public static String parseDate(String pattern, String value) throws ParseException {  
    return  formatter.format(classeFormata.parseDate(String pattern, String value));
  } 
  
   public void outroMetodo(){
     classeFormata.outroMetodo()
   }
  //Metodos da ClasseFormata
}

assim vc tem os msm métodos da classe principal com isso vc fez uma composição em vez de herança e decorou seu metodo para retornar o valor formatado para sua view....

Os padrões originais são esse aki.
decorator
composite
O meu exemplo é uma variação dos 2DP

espero pode ter te ajudado...
qlqr coisa é só chamar

Criado 2 de abril de 2008
Ultima resposta 3 de abr. de 2008
Respostas 8
Participantes 4