domingo, 10 de agosto de 2008

Formatação de datas usando Java

A classe java.util.Date é a principal para trabalhar com datas em Java, mas como na sua construção não ocorreu uma preocupação com a internacionalização, a maioria dos seus métodos são de uso desaconselhado… Talvez esse seja o motivo pelo qual a as perguntas sobre o correto uso de datas em Java sejam recorrente nos fóruns de iniciantes da linguagem.

Parte do pacote java.text a classe DateFormat é a principal classe para formatação de datas utilizando Java. Essa classe suporta internacionalização, ou seja, é possível representar datas em vários idiomas/locais do mundo.

A classe DateFormat é uma classe abstrata, dessa forma, não possui construtor público, mas disponibiliza vários métodos estáticos, que funcionam com Factories, e permitem obter uma instância da classe:

DateFormat.getDateInstance() – obtém uma instância de DateFormat para representação de datas;
DateFormat.getTimeInstance() – obtém uma instância de DateFormat para representação de horas;
DateFormat.getDateTimeInstance() – obtém uma instância de DateFormat para representação de Data/Hora.

Todos os métodos permitem um parâmetro inteiro que representa o estilo e também a utilização do java.util.Locale. Vamos observar um código de exemplo:

import java.text.DateFormat;
import java.util.Calendar;
import java.util.Locale;

public class Data {

public static void main(String[] args) {

Locale brasil = new Locale(”pt”, “BR”);
Locale canada = new Locale(”fr”, “CA”);
Calendar c = Calendar.getInstance();

Integer[] estilos = { DateFormat.DEFAULT, DateFormat.SHORT,
DateFormat.MEDIUM, DateFormat.LONG, DateFormat.FULL
};

DateFormat dt = null;
System.out.println(”– Brasil –”);
for (int estilo : estilos) {

dt = DateFormat.getDateInstance(estilo, brasil);
System.out.println(dt.format(c.getTime()));

}

System.out.println(”– Canada –”);
for (int estilo : estilos) {

dt = DateFormat.getDateInstance(estilo, canada);
System.out.println(dt.format(c.getTime()));

}

}

}

E obtivemos a seguinte saída:

– Brasil –
13/04/2008
13/04/08
13/04/2008
13 de Abril de 2008
Domingo, 13 de Abril de 2008

– Canada –
2008-04-13
08-04-13
2008-04-13
13 avril 2008
dimanche 13 avril 2008

Nesse exemplo foi apresentada a impressão de uma mesma data em dois idiomas/paises diferentes (Português/Brasil e Francês/Canadá).

É evidente que existem situações onde apenas os estilos predefinidos não atendem, é para essas situações que existe a classe java.text.SimpleDateFormat.

A classe SimpleDateFormat é uma implementação especializada da classe DateFormat e permite que uma data/hora seja formatada utilizando regras menos restritivas do que o Locale/estilo, com essa classe é possível por exemplo representar uma data com somente os dois dígitos da hora. Vamos logo ao exemplo:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class FormatData {

public static void main(String[] args) {

Calendar c = Calendar.getInstance();

String[] estilos = { “dd/MM/yyyy hh:mm:ss”, “dd/MM-yyyy hh:MM:ss”,
“EEEE dd MM yyyy”, “EEE, dd # MMM # yyyy”, “SSS.ss -> MMMM” };

DateFormat dt = null;
for (String estilo : estilos) {

dt = new SimpleDateFormat(estilo);
System.out.println(dt.format(c.getTime()));

}

}

}

Nesse exemplo tivemos a seguinte saída:

13/04/2008 21:48:49
13/04-2008 09:48:49
Domingo 13 04 2008
Dom, 13 # Abr # 2008
468.49 -> Abril

Pelo que podemos observar através da classe SimpleDateFormat é possível realizar qualquer formatação de datas.

Como podemos obsevar, nesse post, a linguagem Java oferece duas classes onde é possível fazer formatações com datas.

0 comentários:

Seguidores

Total de visualizações

Tecnologia do Blogger.
Evandro Santos © 2016 Suporte Blogger Templates