BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias Java 8 trará nova API de data/hora inspirada no Joda Time

Java 8 trará nova API de data/hora inspirada no Joda Time

Favoritos

A nova JSR 310, Date e Time API, liderada por Stephen Colebourne, irá substituir a complexa API de datas e horas do Java. Foi adicionada à lista de características do Java 8 e deve ser liberada em janeiro de 2013 na milestone 6.

O tratamento de datas é um problema complexo, e no Java teve uma história longa e conturbada. O suporte inicial foi através da java.util.Date; era chamado de timestamp numérico e juntava a data e a hora, o que complicava a internacionalização. A API antiga tinha outros aspectos negativos, como o uso inconsistente de propriedades - por exemplo o mês e hora iniciam em zero, o dia do mês inicia em um e o ano começa em 1900.

Em 1997 o Java 1.1 adicionou o suporte a SQL através do JDBC, que trouxe outra classe chamada Date, herdando de java.util.Date, mas com semântica diferente. Em 1998 a IBM contribuiu uma nova API, java.util.Calendar, que oferece internacionalização e flexibilidade, mas com grande custo em complexidade, mesmo para tratar problemas simples. Para piorar, todas as propriedades do java.util.Date e java.util.Calendar são mutáveis, sendo possível por exemplo, que qualquer propriedade do tipo Date (ou do tipo Time ou Timestamp) precise ser clonado antes de ser retornado por um método get.

Em 2005 foi liberada a popular e amplamente usada biblioteca Joda Time, criada por Stephen Colebourne. Essa API melhorou muito a situação, mas ainda assim era externa ao Java SE. A JSR 310 foi construída com base nessa experiência e oferece uma substituição para ambas java.util.Date e java.util.Calendar, na biblioteca padrão do Java SE.

A JSR 310 define uma API extensa, mas consistente e fácil de entender. Resolve problemas de complexidade, oferecendo uma API de alto nível para uso em aplicações, e uma de baixo nível para frameworks e outros casos não suportados diretamente. Por exemplo, um desenvolvedor pode usar a API de baixo nível para estender e suportar os campos de data/hora (YEAR, MONTH, DAY_OF_MONTH, HOUR e outros) e adicionar um novo campo.

A API de alto nível fornece classes como ZonedDateTime, para armazenar uma data e hora com fuso-horário; LocalDate, LocalTime e LocalDateTime, para trabalhar com datas e horas "para humanos"; e Instant para um fornecer um timestamp numérico usado para tarefas como logging (análogo ao java.util.Date). Todas essas classes são imutáveis e thread-safe.

Com a JSR 310 agora planejada para inclusão no Java 8, o projeto ThreeTen foi estabelecido através do OpenJDK e fará o trabalho de integração. O projeto que fornece a implementação de referência do JSR 310 está hospedado no SourceForge, com seu código disponibilizado no GitHub.

O Java 8 está previsto para lançamento em outubro de 2013.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

  • Horário de verão

    by Eduardo Souza,

    Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

    Vamos ver como essa nova api tratará o horário de verão, pois, atualmente, as operações com data que interceptem datas de inicio ou final de horário de verão sempre resultam em problemas.

  • Compatibilidade

    by José Eduardo Tomaz,

    Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

    Como ficara a compatibilidade com o código já escrito usando java.util.date e calendar ? Teremos que escrever tudo novamente ?

  • Até que em fim

    by Rodrigo Martins,

    Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

    Faz anos que leio a respeito da possibilidade de substituir toda a tralha de Date e afins por algo baseado no Joda, uma ferramenta que gosto muito. Mudança muito bem vinda.

  • Re: Até que em fim

    by renan reis,

    Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

    Também espero por isso a muito tempo!

  • Re: Compatibilidade

    by Fuad Saud,

    Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

    Provavelmente não. Só que java.util.Date e java.utilCalendar serão marcadas com @Deprecated.

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

BT