BT

Diffuser les Connaissances et l'Innovation dans le Développement Logiciel d'Entreprise

Contribuez

Sujets

Sélectionner votre région

Accueil InfoQ Actualités Une nouvelle API Date pour Java 8

Une nouvelle API Date pour Java 8

Favoris

Suite aux différents travaux effectués cet été pour simplifier et affiner l'API de la JSR 310, la Java Specification Request dirigée par Stephen Colebourne, destinée à remplacer la très complexe API Date de Java, a été ajoutée à la liste des fonctionnalités de Java 8. Elle est attendue avec la sortie de la milestone 6 en janvier 2013.

La manipulation des dates est un problème complexe et Java a une longue histoire à ce sujet. Le support initial est venu avec java.util.Date, un nom ambigu pour un timestamp contenant à la fois une date et une heure, ce qui ne facilite pas l'internationalisation. Il y a d'autres aspects frustrants tels que l'utilisation d'offset incohérent pour les propriétés, par exemple les mois et les heures qui sont de base 0, les jours de base 1 et les années ont un offset à partir de 1900.

Java 1.1 arrive en 1997 avec l'ajout du support de SQL via JDBC qui contient Date qui hérite de java.util.Date, mais avec une signification différente. Pour ajouter un peu de confusion, IBM contribue en 1998 à une API de remplacement, java.util.Calendar, qui permet l'internationalisation et offre beaucoup plus de flexibilité, mais au prix d'une grande complexité même pour les tâches les plus basiques. Pire, toutes les propriétés de java.util.Date et java.util.Calendar sont mutables. En conséquence, toutes les propriétés de type Date (ou de type Time ou Timestamp) doivent être clonées lorsqu'elles sont retournées par un accesseur.

Ce n'est pas avant 2005 que Joda-Time, la populaire et très utilisée librairie de Stephen Colebourne, sorte, améliorant grandement la situation avec en contrepartie l'utilisation d'une librairie externe. La JSR 310 est construite à partir de cette expérience, offrant un remplacement pour java.util.Date et java.util.Calendar intégré directement dans Java SE.

La JSR 310 est une API conséquente, mais en l'ayant un peu utilisée, j'ai le sentiment qu'elle est cohérente et simple à comprendre. Dans la dernière version, elle propose comme solution au problème de la complexité, une API de haut niveau, principalement destinée aux applications, et une API de bas niveau pour les frameworks et les différents cas qui ne sont pas directement supportés. Par exemple, un développeur peut utiliser l'API de bas niveau pour étendre la liste des champs date-heure (YEAR, MONTH, DAY_OF_MONTH, HOUR, ...) pour ajouter un nouveau champ tel que "heure-de-la-quinzaine".

L'API de haut niveau fourni des classes telles que ZonedDateTime (pour stocker une date et une heure avec un fuseau horaire), LocalDate, LocalTime, et LocalDateTime pour interagir avec des dates et des heures "humaines", et Instant pour un timestamp numérique utile pour les logs, ou encore les conversions vers java.util.Date. Toutes ces classes sont immuables et thread-safe.

Maintenant que la JSR 310 est prévue dans Java 8, OpenJDK va faire le travail d'intégration du projet ThreeTen. Ce projet qui fournit l’implémentation de référence de la JSR 310 est hébergé sur SourceForge et le code source est disponible sur Github.

Java 8 est prévu pour octobre 2013.

Evaluer cet article

Pertinence
Style

Contenu Éducatif

BT