Converter uma string no formato dd/MM/yyyy para MM/dd/yyyy e vice-versa[RESOLVIDO]
11 respostas
J
j2tinho
Olá!
Tenho o seguinte problema, tenho que formatar uma string baseado no locale de minha aplicação da seguinte forma. Haverá situações que a string será uma MM/dd/yyyy e precisarei exibir como dd/MM/yyyy ou haverá situações que a string será dd/MM/yyyy e precisarei formatar para MM/dd/yyyy.
Alguém tem alguma idéia?
Valeu galera =]
E qual o problema para isto?
Eu criaria um Enum com os possíveis locales (creio que não serão os quase 200) onde mapearia o formato que desejo.
Então, um método que me permitisse fazer a conversão.
Como faria?
Como eu sou meio chato, converteria para Date e então para o formato que quero. Agora, se você quer, pesquise por split…
chibana
Olha pelo que sei vc pode usar 2 maneiras…
No primeiro caso, vc joga para o tipo DATE com a classe SimpleDateFormat assim:
Date data = new SimpleDateFormat("dd/MM/yyyy").parse("19/02/2012");
A segunda por exemplo vc quer jogar para uma string…vc pode fazer o seguinte:
Existem umas estratégias alternativas, uma delas você pode ver aqui.
Mas eu concordo com o drsmachado. Se fizer do jeito dele você pode criar uma classe bem reutilizável aí, usando para converter as datas em todo o sistema
No meu caso estou passando para sql.Date, mas pode utilizar util.Date também.
J
j2tinho
Olá. Obrigado pelas respostas. Na verdade usei o SimpleDateFormat da seguinte porém está formantando para um valor errado da data oo seja, está alterando a data.
chibana
j2tinho, posta seu código ai e a gente vê o que pode fazer para ajudar =)
drsmachado
Bom, em se tratando de data, use um objeto do tipo Date (ou Calendar).
Por que um enum com o locale e o formato? Mais simples de manter.
publicenumLocal{PT_BR("dd/MM/yyyy",newLocale("pt_BR")),EN_US("MM/dd/yyyy",Locale.en_US);privateStringformato;privateLocalelocal;privateLocal(finalStringlocal,finalLocalelocal){setLocal(local);setFormato(formato);}publicstaticStringgetFormatoByLocale(Localelocal){for(Locall:Local.values()){if(l.getLocal().equals(local)){returnl;}}returnnull;}//getters e setters}
// pattern é baseado no meu locale pode ser dd/MM/yyyy ou MM/dd/yyyy// date é o valor que quero formatar pode estar 19/02/2013 ou 02/19/2013publicStringformatador(Stringpattern,Stringdate){SimpleDateFormatsdf=newSimpleDateFormat(pattern);DatedateFormatted=newDate();StringstringDate="";try{if(date!=null&&!date.isEmpty()){dateFormatted=sdf.parse(date);stringDate=sdf.format(dateFormatted);}}catch(ParseExceptione){e.printStackTrace();}returnstringDate;}
Esse método está alterando as datas quando tento formatar de MM/dd/yyyy para dd/MM/yyyy
Rodrigo_Sasaki
j2tinho:
// pattern é baseado no meu locale pode ser dd/MM/yyyy ou MM/dd/yyyy
// date é o valor que quero formatar pode estar 19/02/2013 ou 02/19/2013
public String formatador(String pattern,String date) {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Date dateFormatted = new Date();
String stringDate = "";
try {
if(date != null && !date.isEmpty()){
dateFormatted = sdf.parse(date);
stringDate = sdf.format(dateFormatted);
}
} catch (ParseException e) {
e.printStackTrace();
}
return stringDate ;
}
Esse método está alterando as datas quando tento formatar de MM/dd/yyyy para dd/MM/yyyy
Não que esteja errado, mas ainda prefiro a solução do drsmachado. A solução dele ja prevê problemas de Locale, que não são incomuns, quem tem um tempinho de GUJ percebe o número de tópicos abertos aqui, justamente por causa do Locale
J
j2tinho
Compartinhando com vcs… Eu resolvi da seguinte forma:
Criei uma regex para saber o formato da minha string (No caso se era dd/MM/yyyy ou MM/dd/yyyy).
De posse do formato correto utilizei o SimpleDateFormat para montar o object date baseado no formato da string.
Valeu galera =]
Rodrigo_Sasaki
j2tinho:
Compartinhando com vcs… Eu resolvi da seguinte forma:
Criei uma regex para saber o formato da minha string (No caso se era dd/MM/yyyy ou MM/dd/yyyy).
De posse do formato correto utilizei o SimpleDateFormat para montar o object date baseado no formato da string.
Valeu galera =]
Fiquei curioso.
Como você sabe se é dd/MM/yyyy ou MM/dd/yyyy usando expressões regulares?