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.