Artigo Java Magazine 22 - Datas e Horas em Java
A manipulação de datas em Java pode parecer um assunto complicado para o iniciante, dada a quantidade de classes envolvidas.
Datas e Horas em Java
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.
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
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.
Classe abstrata que representa um fuso horário
Subclasse de TimeZone com a capacidade de lidar com diferentes regras para o horário de verão
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