Formatando Datas

5 respostas
H

Estou criando um projeto web intercionalizado e ele recebe por parâmetro na hora do login qual é o local(País) onde está sendo executado.
Porém preciso fazer com que a formatação da data fique de acordo com o país, ex:

Brasil: 20/08/2009
EUA: 08/20/2009
Suécia: 2009/08/20

Estava fazendo alguns testes assim:

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

public class NewCalendar {
	public static void main(String[]args){
		Locale locale = new Locale("fr", "FR");
		Calendar calendar = Calendar.getInstance();
		Date date = calendar.getTime();
		SimpleDateFormat sdf = null;
		if(locale.getCountry()=="BR"){
			sdf = new SimpleDateFormat("dd/MM/yyyy - EEEEE",locale);
		}else{
			sdf = new SimpleDateFormat("MM/dd/yyyy - EEEEE",locale);
		}
		System.out.println(sdf.format(date));
	}
}

porém assim eu teria que determinar uma formatação para cada um dos inúmeros países que existem(algo inviável), a questão é como eu posso fazer a formatação utilizando o padrão do país de forma automatizada?

5 Respostas

P

Cara,

Você pode usar o método getLocale do objeto HTTPRequest e depois passar este Locale para o seu DateFormat:

Locale locale = request.getLocale();
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, locale);
T

Rode este programa.

import java.util.*;
import java.text.*;

class ListarDateFormats {
    public static void main(String[] args) {
        Date dt = new Date();
        for (Locale loc : DateFormat.getAvailableLocales()) {
             DateFormat dfFull = DateFormat.getDateInstance (DateFormat.FULL, loc);
             DateFormat dfLong = DateFormat.getDateInstance (DateFormat.LONG, loc);
             DateFormat dfMedium = DateFormat.getDateInstance (DateFormat.MEDIUM, loc);
             DateFormat dfShort = DateFormat.getDateInstance (DateFormat.SHORT, loc);
             System.out.println ("=== Locale " + loc.getDisplayName() + " ===");
             System.out.println ("FULL  : " + dfFull.format (dt));
             System.out.println ("LONG  : " + dfLong.format (dt));
             System.out.println ("MEDIUM: " + dfMedium.format (dt));
             System.out.println ("SHORT : " + dfShort.format (dt));
        }
    }
}
H

Eu estava fazendo alguns testes e o melhor é o SHORT ja que no MEDIUM tem letras junto, o problema do SHORT é que para alguns países não coloca o “0” (zero) antes dos dias ou meses e o ano fica apenas como(09).

T

Hum… você pode então criar um arquivo com os formatos do jeito exatamente como você quer.
Aí, dado o locale, você voltaria um DateFormat de acordo com o que você precisa.
Esse arquivo teria mais ou menos uns 152 locales diferentes (fiz essa estimativa de acordo com aquele programa que postei, que lista os locales e seus respectivos DateFormats.

B

Por que isso é um problema?

Criado 20 de agosto de 2009
Ultima resposta 20 de ago. de 2009
Respostas 5
Participantes 4