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…
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
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.
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.
public enum Local{
PT_BR("dd/MM/yyyy", new Locale("pt_BR")),
EN_US("MM/dd/yyyy", Locale.en_US);
private String formato;
private Locale local;
private Local(final String local, final Locale local){
setLocal(local);
setFormato(formato);
}
public static String getFormatoByLocale(Locale local){
for(Local l : Local.values()){
if(l.getLocal().equals(local)){
return l;
}
}
return null;
}
//getters e setters
}
E
public class DataUtil{
public static String getDataFormatada(Locale local, Date data){
return new SimpleDateFormat(Local.getFormatoByLocale(local)).format(data);
}
}
// 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
[quote=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[/quote]
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
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 =]
[quote=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 =][/quote]
Fiquei curioso.
Como você sabe se é dd/MM/yyyy ou MM/dd/yyyy usando expressões regulares?