Dois-je utiliser des classes de date et d’heure Java ou aller avec une bibliothèque tierce comme Joda Time?

Je crée un système Web qui sera utilisé dans des pays du monde entier. Un type de données à stocker est la date et l’heure.

Quels sont les avantages et les inconvénients de l’utilisation des classes de date et d’heure Java par rapport aux bibliothèques tierces telles que Joda Time ? Je suppose que ces bibliothèques tierces existent pour une bonne raison, mais je ne les ai jamais vraiment comparées.

EDIT: Maintenant que Java 8 est sorti, si vous pouvez l’utiliser, faites-le! java.time est encore plus propre que Joda Time, à mon avis. Cependant, si vous êtes bloqué avant Java-8, lisez la suite …

Max a demandé les avantages et les inconvénients de l’utilisation de Joda …

Avantages:

  • Il fonctionne très bien. Je soupçonne fortement qu’il y a beaucoup moins de bogues dans Joda que les bibliothèques Java standard. Certains des bogues des bibliothèques Java sont vraiment difficiles (voire impossibles) à corriger en raison de la conception.
  • Il est conçu pour vous encourager à réfléchir à la gestion de la date et de l’heure de manière appropriée, en séparant le concept d’heure locale (par exemple, «réveillez-moi à 7h du matin») et à 15h PST, il ne peut pas y avoir 15h où il est, mais c’est le même instant “)
  • Je pense que cela facilite la mise à jour de la firebase database des fuseaux horaires, qui change assez fréquemment
  • Il a une bonne histoire d’immuabilité, ce qui rend la vie beaucoup plus facile IME.
  • Partant de l’immuabilité, tous les formateurs sont sécurisés pour les threads, ce qui est formidable car vous voulez presque toujours réutiliser un seul formateur via l’application
  • Vous apprendrez java.time en Java 8, car ils sont au moins assez similaires

Les inconvénients:

  • C’est une autre API à apprendre (bien que les documents soient plutôt bons)
  • C’est une autre bibliothèque à construire et à déployer
  • Lorsque vous utilisez Java 8, il y a encore du travail à faire pour migrer vos compétences
  • Je n’ai pas réussi à utiliser le DateTimeZoneBuilder par le passé. Ceci est un cas d’utilisation très rare cependant.

Pour répondre à l’idée d’oxbow_lakes de construire efficacement votre propre petite API, voici pourquoi je pense que c’est une mauvaise idée:

  • C’est du travail. Pourquoi travailler quand c’est déjà fait pour vous?
  • Un nouveau venu dans votre équipe est beaucoup plus susceptible de se familiariser avec Joda qu’avec votre API locale.
  • Vous risquez de vous tromper au-delà des utilisations les plus simples … et même si vous pensez au départ que vous n’avez besoin que de fonctionnalités simples, ces choses ont tendance à devenir plus complexes, un tout petit peu à la fois. La manipulation de la date et de l’heure est difficile à faire correctement. De plus, les API Java intégrées sont difficiles à utiliser correctement. Il suffit de regarder les règles de fonctionnement de l’arithmétique date / heure de l’API de calendrier. Construire quoi que ce soit par dessus est une mauvaise idée plutôt que d’utiliser une bibliothèque bien conçue pour commencer.

Eh bien, sauf si vous avez l’intention d’attendre Java 8, en espérant qu’ils implémenteront une meilleure API pour manipuler la date et l’heure, oui, s’il vous plaît, utilisez Joda-Time . Il faut gagner du temps et éviter de nombreux maux de tête.

La réponse est: cela dépend

JODA (et JSR-310) est une bibliothèque de date / heure entièrement fonctionnelle, qui prend en charge l’utilisation de plusieurs systèmes de calendrier.

Personnellement, j’ai trouvé que JODA était une étape trop complexe en termes de complexité pour ce dont j’avais besoin. Les 2 principales erreurs (IMHO) dans les classes standard de Date et Calendar Java sont:

  1. Ils sont mutables
  2. Ils mélangent le concept d’un an-mois-jour à partir d’un instant-in

Bien que JODA y réponde, il vous sera très facile de lancer vos propres classes pour YearMonthDay et Instant , qui utilisent toutes les deux les classes java sous le capot pour les calculs réels. Ensuite, vous n’avez pas à vous familiariser avec une API de> 100 classes, un mécanisme de formatage / parsing différent, etc.

Bien sûr, si vous avez besoin d’une représentation complète de différentes chronologies (par exemple en hébreu) ​​ou souhaitez pouvoir définir votre propre système de calendrier imaginaire (par exemple pour un jeu que vous écrivez), JODA ou JRS-310 est peut-être pour vous. Si non, alors je suggère que rouler le vôtre est peut-être la voie à suivre.

Stephen Colebourne, qui a écrit JODA à la première place, remplacera logiquement JODA.

Tout dépend de ce que vous faites avec les dates. Si vous les persistez simplement, les dates intégrées à Java feront probablement tout ce que vous voulez. Cependant, si vous faites de longues manipulations de date, vous serez probablement mieux avec Joda.

Vous devez utiliser une bibliothèque Joda-Time, car:

  1. Joda-Time prend en charge la norme ISO 8601 , qui est une méthode standard de
    date de représentation.
  2. Ajouter et soustraire un jour / mois / année est plus facile dans Joda-Time que java.util.date.
  3. Une initialisation à une date donnée est tellement plus facile dans Joda-Time.
  4. Joda-Time prend également en charge le fuseau horaire.
  5. Joda-Time a une meilleure parsing intégrée. Une date incorrecte comme “2014-02-31” est renvoyée comme une erreur: Exception in thread "main" org.joda.time.IllegalFieldValueException: Cannot parse "2014-02-31": Value 31 for dayOfMonth must be in the range [1,28].

Vous pouvez aimer cette page pour plus de détails: http://swcodes.blogspot.com/