Por que eu devo ler este artigo:Este artigo é útil por apresentar a implementação da JSR-310, disponível no Java 8, que reformulou totalmente os recursos para manipulação de datas e horas. Esta reformulação está centralizada em um novo pacote e distribuída em uma série de classes que serão abordadas neste artigo.

Durante a apresentação destas classes serão utilizados exemplos práticos com o intuito de facilitar o entendimento e a comparação com a API existente nas versões anteriores.

Até então, trabalhar com data e hora no Java sempre foi algo custoso, devido às limitações da API. Com base nisso, a nova API busca simplificar a manipulação e a representação destas informações, permitindo assim uma maior produtividade e clareza no desenvolvimento de software.

A manipulação de datas e horas está presente na maioria dos softwares, independente do porte ou do negócio por trás do sistema. Infelizmente, devido às limitações dos recursos disponíveis nas versões que antecederam a versão 8, desenvolver um software que possui uma quantidade razoável de manipulação de datas e horas sempre foi algo muito custoso.

Na primeira versão do Java, as datas e horas eram representadas através da classe java.util.Date, que basicamente é uma tradução da biblioteca de datas e horas da linguagem C. Em virtude disso, a primeira classe para manipular datas e horas no Java não tinha suporte a internacionalização.

A partir do Java 1.1, com a chegada da classe java.util.Calendar, esse problema foi resolvido. Porém, os recursos para manipular datas e horas disponíveis desde a versão 1.1 possuem várias limitações como, por exemplo, a ausência de:

· type-safe: como a maioria dos métodos utilizam um inteiro (int) como parâmetro, não existem garantias que um determinado valor será válido para o método invocado. Por exemplo, em um método que possui um parâmetro do tipo int para representar um mês, é difícil saber qual o valor correto para representar o mês de Janeiro, se 0 ou 1.

· thread-safe: por não ser thread-safe, a classe java.util.Calendar permite que uma thread interfira e altere informações de uma data e/ou hora de outra thread (interferência esta que não foi prevista durante o desenvolvimento), o que pode gerar um grande efeito colateral no sistema;

· flexibilidade: as classes existentes desde a concepção do Java não possuem flexibilidade para criar novos sistemas de calendários, obrigando os desenvolvedores a utilizar um sistema de calendário pré-estabelecido, como o GregorianCalendar.

Com o intuito de contornar os problemas mencionados e proporcionar aos desenvolvedores maior facilidade e produtividade na manipulação de datas e horas, foram projetadas e construídas muitas bibliotecas, sendo a mais popular a Joda-Time.

Com o passar do tempo, a Joda-Time se tornou a API de data e hora padrão (apesar de não oficial) de grande parte dos sistemas desenvolvidos com versões anteriores ao Java 8.

Esta é uma API fácil de utilizar, com suporte a diversos sistemas de calendários e com classes específicas para representar datas, horas, instantes, duração, períodos, entre outros.

Visando resolver grande parte dos problemas mencionados, em 2007 foi aprovada pelo JCP (Java Community Process) a proposta de uma nova API oficial de data e hora do Java, a JSR-310: Date and Time API.

Visão geral da API

A nova API de data e hora foi construída do zero, buscando corrigir todos os problemas existentes nas versões anteriores, utilizando, para isso, o Joda-Time como fonte de inspiração. Vale ressaltar que o líder da JSR-310 foi o mesmo que projetou a Joda-Time, Stephen Colebourne.

A implementação da JSR-310 foi planejada para ser lançada junto com a versão 8 do Java e possui as seguintes características:

· Imutabilidade: todas as classes são imutáveis, garantindo uma fácil utilização em ambientes multi-thread;

· Separação de conceitos: foram criadas duas categorias de tempo, uma para humanos (human time) e outra para máquinas (continuous time);

· Clareza: os métodos disponíveis nas novas classes possuem nomes condizentes com sua funcionalidade, além de uma documentação simples;

· Extensível: a nova API utiliza como padrão o sistema de calendário ISO-8601, porém permite a criação de outros sistemas de calendário de forma simples.

Com o intuito de manter as características citadas, novas classes foram criadas e são responsáveis por manipular datas, ...

Fim do trecho gratuito • continue abaixo
CONTEÚDO EXCLUSIVO

Desbloqueie toda a DevMedia

  • +2000 artigos e vídeos
  • +40 trilhas sobre Front-end, Back-end, IA e muito mais
  • +5000 exercícios práticos
  • Mentorias ao vivo individuais
até 50% OFF
A partir de
R$ 69 /mês
Assinar agora