Depuis la version 1.7 de java et la JCR 310, les dates sont plus faciles à manipuler, mais lorsque l’on est obligé d’utiliser java 1.6, la manipulation des dates n’est pas chose aisée, elle laisse place à des comportements parfois assez aléatoires, des bugs et un mauvais design, la solution s’appelle Joda-time.
Le projet JODA
C’est un ensemble d’API distribué sous la licence apache version 2, en plus de Joda-time, il en existe quatre autres :
- Joda-Money – Type de base monétaire
- Joda-Beans – Nouvelle generation de javabeans
- Joda-Convert – Conversion de chaine en objet
- Joda-Primitives – Collection de primitives
Installation
Pour obtenir les sources de Joda-Time: Télécharger l’archive ici
Il y a plusieurs façons d’importer les sources, comme c’est un projet maven, vous devrez installer Maven en local sur votre machine ou le plug-in dans votre IDE préféré.
Comme j’utilise eclipse et que par défaut le plug-in maven n’est pas installé, le plus simple est d’installer maven en local.
Sur la racine de l’API, lancer la commande maven pour compiler :
mvn compile
Ensuite la commande suivante pour générer les fichiers .classpath et .project
mvn eclipse :eclipse
Ensuite importer le projet en faisant nouveau -> projet java -> rechercher emplacement
Créer un package de test
Jeu de tests
Avec ces exemples, on peut se rendre compte de la facilité de manipulation des dates avec joda-time en comparaison aux classes du JDK standard (quatre façons différentes d’instancier un point dans le temps pas très parlantes).
Comparatif
Points forts de joda-time
- D’excellentes performances
- La facilité grâce à des noms de méthode parlants
- Il n’est pas facile à utiliser pour manipuler des données courantes
- La conception des classes Date et Calendar
- Classes immuables
- Possibilité de convertir vers les classes standards du JDK
- Existe depuis 2002
- Possibilité d’intégrer une MAJ des zones de temps via http://www.iana.org/time-zones
Les points faibles des classes standards du JDK
- Instanciation très couteuse
- Les performances sont mauvaises
- Traitements ne sont pas threadsafes
- Gestion des mois de 0 à 11
- Les méthodes n’ont pas des noms très parlants
- La classe SimpleDateFormat est trop laxiste sur le format