Esse artigo faz parte da revista Java Magazine edição 22. Clique aqui para ler todos os artigos desta edição

Atenção: por essa edição ser muito antiga não há arquivo PDF para download.Os artigos dessa edição estão disponíveis somente através do formato HTML. 

Primeiros Passos

Datas e Horas em Java

 

Fernando Lozano

A manipulação de datas em Java pode parecer um assunto complicado para o iniciante, dada a quantidade de classes envolvidas. São ao todo onze classes, que praticamente não mudaram desde o Java 1.1.5: cinco no pacote java.util, três em java.text, e mais três no pacote java.sql. Veja na Tabela 1 uma relação de todas as classes e uma breve descrição de suas funcionalidades; a Figura 1 mostra um modelo UML dessas classes.

A maior parte dessa dificuldade é justificada depois que se entende que os recursos de Java de manipulação de datas e horas, visam atender a várias culturas em um ambiente interconectado. As soluções simples utilizadas por outras plataformas não são adequadas, e essa profusão de classes corresponde a uma divisão bem clara de responsabilidades. No final das contas, a grande maioria dos casos é atendida por apenas três classes: java.util.Date, java.util.Calendar e java.text.DateFormat.

Por outro lado, a API apresenta algumas inconsistências que dificultam o seu entendimento além do necessário, o que motivou muitas críticas pela comunidade de desenvolvedores. Um grupo chegou até a registrar um bug report na Sun, pedindo a depreciação de toda a API e sua substituição por um novo conjunto de classes; outro criou sua própria API do zero, chamada “Joda”. Veja as referências ao final do artigo para mais detalhes.

O fato é que a API de datas do Java foi a primeira tentativa de se resolver de forma global a questão de datas em uma plataforma popular de desenvolvimento, com o objetivo de que o mesmo código funcione inalterado em qualquer lugar do mundo. É um grande feito, pois outras plataformas populares possuem versões distintas (não apenas em tradução de mensagens, mas com código diferente mesmo!) para os vários mercados do oriente.

Mas isso é relevante para o desenvolvedor brasileiro? Certamente que sim! Não apenas porque temos que usar as classes padrão do Java, mas também em razão de nossas empresas estarem atuando fortemente nos países árabes ou na China, apenas para citar alguns exemplos.

 

java.util.Date

Representa um momento no tempo, independente de sua representação ou localização geográfica, com precisão de milisegundos

java,util.Calendar

Classe abstrata que interpreta um momento no tempo de acordo com um sistema em particular de calendário e fuso horário

java.util.GregorianCalendar

Classe concreta que implementa o calendário Gregoriano, o utilizado nas principais culturas ocidentais (inclusive no Brasil). Infelizmente esta é a única subclasse de Calendar fornecida pelo Java2 SD, porém o projeto ICU4J (veja referências) fornece calendários hindus, árabes, hebreus e japoneses.

java.util.TimeZone

Classe abstrata que representa um fuso horário

java.util.SimpleTimeZone

Subclasse de TimeZone com a capacidade de lidar com diferentes regras para o horário de verão

java.text.DateFormat

Classe abstrata que abstrai a representação de uma data como String, segundo as regras de um determinado calendário e um fuso horário

java.text.SimpleDateFormat

...
Quer ler esse conteúdo completo? Tenha acesso completo