Manipulando datas em Java
Por Rafael da Silva
(crafards@gmail.com)
Nesta edição, aprenda alguns recursos que lhe ajudarão a manipular datas e tempo, em Java, de forma descomplicada.

Na classe java.util.Date, podemos obter a data atual simplesmente criando um objeto Date, sem parâmetros, como no exemplo abaixo:

 Date d = new Date(); 

Podemos também, utilizando o construtor sobrecarregado, passar outra data em milissegundos, desde 1º de janeiro de 1970.

 Date d new Date(374021196980L) //7 de novembro de 1981 

Para obtermos a data atual utilizando a classe java.util.Calendar, basta operarmos da seguinte forma:

 Calendar c = Calendar.getInstance(); 

Com a instancia ‘c’ de Calendar, podemos configurar uma data de várias formas.

c.setTime(new Date()); //passando um objeto Date
c.set(year,month,day);
c.set(year,month,day,hour,minute);  //atraves do metodo sobrecarregado ‘set’
c.set(year,month,day,hour,minute,second);

Também podemos avançar nosso calendario no tempo, utilizando o método add. Este método recebe dois parâmetros, o primeiro é uma constante inteira, que representa a unidade que será incrementada no calendario e o segundo parametro é o numero de vezes que essa unidade será incrementada.

A classe java.util.Calendar fornece várias constantes que podem representar segundos, horas, dias, meses e anos.

Algumas das constantes de java.util.Calendar:

Calendar.SECOND, Calendar.HOUR, Calendar.HOUR_OF_DAY, Calendar.DAY_OF_MONTH, Calendar.DAY_OF_WEEK, Calendar.MONTH, Calendar.YEAR

Exemplos de uso do método add:

c.add(Calendar.YEAR, 40); //adiciona 40 anos ;)
c.add(Calendar.MONTH, 3); //adiciona 3 meses
c.add(Calendar.DAY_OF_YEAR, 30); //adiciona 30 dias

Essas constantes também são uteis caso queira saber outras informações a respeito da data, através do método get:

c.get(Calendar.DAY_OF_MONTH); //adquire o dia do mês
c.get(Calendar.DAY_OF_YEAR); //adquire o dia do ano

Um detalhe importante é que Calendar conta os meses a partir de 0. Portanto, se estamos em julho, estamos no mês 6.

Uma alternativa mais completa que a atualmente fornecida por Java para representar datas é a biblioteca Joda.

Nessa biblioteca utiliza-se a classe org.joda.time.DateTime para instanciar a data atual:

 DateTime dt = new DateTime(); 

A manipulação das datas também é bastante fácil:

int month = dt.getMonthOfYear(); //adquire o mês
dt.withYear(2000) //muda o ano para 2000
monthName = dt.monthOfYear().getAsText(); //adquire o mês em texto

Em Joda o mês é contado a partir de 1. Ou seja, se estamos em Julho, estamos no mês 7. A biblioteca também possui uma internacionalização bastante fácil:

String frenchMonthName = dt.monthOfYear().getAsText(Locale.FRENCH); //adquire o nome do mes em francês
String germanMonthName = dt.monthOfYear().getAsText(Locale.GERMAN); //o mesmo, porém em alemão

Diferente da API de Java, que só implementa o calendário Gregoriano, comum nas culturas ocidentais, Joda possui 8 sistemas de calendário, ou cronologia, como é chamado, e pretende aumentar o número de calendários com o tempo. Como calendário padrão, a biblioteca adota o ISO8601, que é uma formalização do Calendário Gregoriano utilizada no mundo dos negócios.

DateTime buddist = dt.withChronology(BuddhistChronology.getInstance()); //muda a instancia ‘dt’ para o calendario budista
DateTime islamic = dt.withChronology(IslamicChronology.getInstance()); //o mesmo, porém no calendário islão

Joda é uma boa alternativa para as bibliotecas padrões de Java, que já tem um grande número de construtores deprecated, e portanto, não podem/devem mais ser instanciados. Na página inicial da biblioteca, os desenvolvedores apontam diversos motivos para utilizar Joda em sua aplicação. Entre eles: a facilidade de uso, facilidade para estender suas classes, internacionalização descomplicada, cálculos entre zonas e fusos-horários fáceis, vários calendários diferentes, bom desempenho, um guia rápido e um guia completo. Joda também está sob a licença Apache 2.0 e tem código aberto, sendo seu repositório de versões bem visível na página principal.

O lançamento da oitava versão de Java promete várias mudanças nas classes de manipulação de tempo e datas, mas por enquanto, em geral, muitos desenvolvedores concordam que Joda-time é a melhor opção de API para datas

Jornal PETNews - Edição: Jessika Renally - Revisão: Tiaraju Smaneoto e Lívia Sampaio
Grupo PET Computação UFCG, 2013. All rights reserved.