Converter uma string no formato dd/MM/yyyy para MM/dd/yyyy e vice-versa[RESOLVIDO]

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…

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:

String dataParaBanco = new SimpleDateFormat("yyyy-MM-dd").format(data);

Espero que tenha ajudado. :smiley:

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

Utilize o SimpleDateFormat

        SimpleDateFormat format = new SimpleDateFormat("dd/MM/yy");//formato cfe retornos NÂO MUDAR
        java.sql.Date date;

        try {
            date = new java.sql.Date(format.parse(data).getTime());
        } catch (ParseException ex) {
            // System.out.println(ex);
            return null;
        }

No meu caso estou passando para sql.Date, mas pode utilizar util.Date também.

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.

j2tinho, posta seu código ai e a gente vê o que pode fazer para ajudar =)

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?