Tratamento de Datas com Java


Introdução

Os tipos primitivos da linguagem Java, não cobrem todas as necessidades. Uma dessas necessidades que logo se apresenta, é o tratamento de datas.

O tratamento de datas por si só, já não é uma tarefa muito simples, pois existem vários calendários.

O calendário mais usado no ocidente, é o calendário Gregoriano, e mesmo esse, possui várias imperfeições, como por exemplo o fato de o número de dias num mês ser diferente do outro, o número de dias no ano também pode variar (ano bissexto).

Para completar esses problemas, a representação textual das datas, varia de um país para outro. Também é necessário considerar o ponto de referência (fuso horário), pois a data e hora, variam de acordo com o local de referência.

Referência é a palavra chave para o tratamento de datas em Java, que usa como ponto de origem, a data de 1 de Janeiro de 1970, que define um ponto no tempo de forma única.

Um outro fator que complica um pouco a manipulação de datas em java, é a questão histórica de a API de tratamento de datas não ser intuitiva.

A classe Date

A forma mais básica (Java 1.0) de se obter datas em Java, é usando a classe “Date” do JDK, que pode retornar a data / hora do sistema operacional, mas é capaz de retornar também uma data específica.

Desde o Java 1.1, outras classes foram adicionadas para dividir a responsabilidade de manipular datas. Hoje em dia portanto, estas são as classes para lidar com esse assunto:

De forma análoga, foram disponibilizadas classes para tratar datas em bancos de dados:

Apesar de toda essa especialização, a utilização das APIs de datas em Java, podem levar a alguns mal entendidos, como por exemplo:

Não é objetivo desse artigo ser um tratado completo sobre o assunto. Sendo assim, vamos explorar alguns exemplos práticos bem simples e objetivos para ilustrar a utilização das várias classes que tratam datas em programas Java.

As classes de Calendário

A classe java.util.Calendar é uma classe abstrata. A aplicação de Calendar.getInstance(), retorna uma classe de implementação: java.util.GregorianCalendar. Em Java, GregorianCalendar suporta na verdade, os calendários Gregoriano e Juliano.

As classes de Formatação

A classe java.text.DateFormat é uma classe abstrata de formatação (data para texto) e conversão (texto para data) independente do local. A classe java.text.SimpleDateFormat, é uma subclasse de implementação. Ambas trabalham com objetos do tipo Date.

Operações com datas

Ao lidar com datas, a necessidade mais comum, é efetuar operações, do tipo adicionar dias, meses ou anos a uma determinada data. Operações de subtração são efetuadas adicionando números negativos.

Datas e seus símbolos

A classe java.text.DateFormatSymbols permite lidar, individualmente, com vários elementos de texto que fazem parte da composição de uma data, tais como: dias, meses, abreviações, etc.

O tipo de dado TimeStamp

Cabe aqui, uma observação importante. Existem alguns bancos de dados que suportam nos seus tipos Date, também a hora. Caso específico do Oracle, que possui os tipos de dado Date e Timestamp, sendo que o tipo Date também pode armazenar a hora. É importantíssimo fazer com que os dados definidos na aplicação sejam coerentes com os tipos de dados definidos nos bancos de dados.

Assim sendo, se a sua aplicação necessita de um dado do tipo Timestamp, exija que o tipo de dados seja definido no banco como Timestamp, mesmo que o tipo Date possa armazenar a hora, pois os tratamentos, principalmente se APIs de terceiras partes foram envolvidas (o Hibernate é um exemplo), o tratamento se dá de forma diferente, e você pode vir a ter problemas.

Por exemplo: a não ser que esteja lidando com mapa astral, uma data de nascimento pode ser expressa apenas com a data. Já se o objetivo for saber o momento exato em que um determinado evento ocorreu, um timestamp será necessário contemplando data e hora, sendo esta última, com precisão de no mínimo, centésimos de segundo.

Espero que esses exemplos simples e objetivos, esclareçam a utilização de datas com Java.

Se ainda assim restar qualquer dúvida, use o nosso grupo de discussão!

Grande Abraço.

Por: Ícone de MarcRic em: 21/05/2013