Java

Tuesday, May 09, 2006

 

Números, Datas e Formatação II

É por mei da classe Locale que obtemos facilidades para tratar a internacionalização. Para criar uma instância de Locale, temos basicamente duas opções:

Locale pt = new Locale("pt");
Locale ptBR = new Locale("pt","br");

Com o primeiro construtor obtemos um Locale relativo a uma língua, com o segundo, relativo a uma língua e a uma região onde essa língua é falada, o que é extremamente útil para tratar datas e valores em conformidade com os padrões de cada região. Por exemplo, o códgio a seguir

DateFormat dfbr = DateFormat.getDateInstance(DateFormat.FULL,ptBR);
Calendar c = Calendar.getInstance();
c.set(2006,05,09);
System.out.println(dfbr.format(c.getTime());

irá imprimir a data em sua forma mais extensa e em conformidade com os padrões brasileiros de apresentação de data, inclusive, traduzida para o português. Há mais dois métodos relevantes da classe Locale, por meio dos quais obtemos o nome da língua e do país representados por uma instância do Locale:

System.out.println(ptBR.getDisplayLanguage());
System.out.println(ptBR.getDisplayCountry());
System.out.println(ptBR.getDisplayLanguage(ptBR));
System.out.println(ptBR.getDisplayCountry(ptBR));

Os dois primeiros imprimem o nome da língua e do país no local default, que, geralmente, é o locale US. Neste caso, o resultado seria "portuguese" e "Brazil". Os dois últimos comandos imprimem no local passado como argumento, resultando, portanto, em "português" e "Brasil".

Por fim, a classe NumberFormat é usada para tratar números. Como DateFormat, ela é uma classe abstrata, portanto, para ter uma de suas instâncias, devemos fazer:

NumberFormat nf = NumberFormat.getInstance();
nf = NumberFormat.getNumberInstance();
nf = NumberFormat.getCurrencyInstance();

Cada um desses construtores é sobrecarregado para permitir o use de locales:

NumberFormat nf = NumberFormat.getInstance(ptBR);

Até o momento, não vi qualquer diferença entre getInstance() e getNumberInstance(), ambos retornam um formatador numérico de propósito geral, enquanto getCurrencyInstance(), um formator numérico para formatar valores financeiros. Sem o uso de locale, esses métodos retornam um formator orientado pelo locale default.
Um método importante dessa classe é setMaximumFractionDigits(), que serve para configurar o número de casas decimais após a vírgula na formação de um número de ponto flutuante. Por exemplo, se fizermos:

double d = 124.233213453;
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(3);
System.out.println(nf.format(d));

será impresso 124.233. NumberFormat também tem um método parse() e ele lança igualmente uma exceção caso a string passada não possa ser convertida para uma instância de Number.

Comments: Post a Comment



<< Home

Archives

March 2006   April 2006   May 2006   July 2006   August 2006  

This page is powered by Blogger. Isn't yours?