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: