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

StackOverflow https://stackoverflow.com/questions/589870

  •  09-09-2019
  •  | 
  •  

Question

Je crée un système basé sur le Web qui sera utilisé dans des pays du monde entier.Un type de données qui doit être stocké est celui des dates et des heures.

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 Heure Joda?Je suppose que ces bibliothèques tierces existent pour une bonne raison, mais je ne les ai jamais vraiment comparées moi-même.

Était-ce utile?

La solution

EDIT: Maintenant que Java 8 a été libéré, si vous pouvez l'utiliser, faites-le! java.time est encore plus propre que Joda temps, à mon avis. Toutefois, si vous êtes coincé pré-Java-8, lisez la suite ...

Max a demandé les avantages et les inconvénients de l'utilisation Joda ...

Avantages:

  • Il fonctionne très bien. Je soupçonne fortement qu'il ya beaucoup moins de bugs dans Joda que les bibliothèques Java standard. Certains des bugs dans les bibliothèques Java sont vraiment difficile (sinon impossible) de corriger en raison de la conception.
  • Il est conçu pour vous encourager à réfléchir à la date / heure de manipulation de la bonne manière - à séparer le concept d'une « heure locale » (par exemple « me réveiller à 7h du matin où je suis ») et un instant dans le temps ( «Je m appeler James à 15 heures PST, il ne peut pas être 15 heures où il est, mais il est le même instant ")
  • Je crois qu'il est plus facile de mettre à jour la base de données de fuseau horaire, qui fait changer relativement fréquemment
  • Il a une bonne histoire immuabilité, ce qui rend la vie beaucoup plus facile IME.
  • de premier plan sur immuabilité, tous les formatteurs sont thread-safe, ce qui est génial parce que vous presque toujours souhaitez réutiliser une seule formatter par l'application
  • Vous aurez une longueur d'avance sur l'apprentissage java.time en Java 8, car ils sont au moins un peu similaire

Moins:

  • Il est une autre API pour apprendre (bien que les documents sont assez bien)
  • Il est une autre bibliothèque pour construire et déployer contre
  • Lorsque vous utilisez Java 8, il y a encore du travail à migrer vos compétences
  • J'ai échoué à utiliser l'DateTimeZoneBuilder efficacement dans le passé. Ceci est un très rares cas d'utilisation bien.

Pour répondre à l'idée des oxbow_lakes de construire efficacement votre propre petite API, voici mon point de vue de pourquoi cela est une mauvaise idée:

  • Il est un travail. Pourquoi travailler quand il a déjà été fait pour vous?
  • Un nouveau venu à votre équipe est beaucoup plus susceptible de se familiariser avec Joda qu'avec votre API Homegrown
  • Vous êtes susceptible de se tromper pour quoi que ce soit au-delà des utilisations les plus simples ... et même si vous avez initialement que vous avez seulement besoin des fonctionnalités simples, ces choses ont une habitude de plus en plus plus compliqué, un tout petit peu à la fois. la manipulation Date et heure est dur pour faire correctement. De plus, les API Java intégré sont difficiles à utiliser correctement - il suffit de regarder les règles sur la façon dont l'arithmétique date / heure de l'API fonctionne calendrier. Construire quoi que ce soit sur le dessus de ceux-ci est une mauvaise idée plutôt que d'utiliser une bibliothèque bien conçue pour commencer.

Autres conseils

Eh bien, à moins que vous avez l'intention d'attendre Java 8, dans l'espoir qu'ils mettront en œuvre un meilleur API pour la manipulation de date et l'heure, oui, s'il vous plaît, utilisez Joda-Time. Il est de gagner du temps et éviter beaucoup de maux de tête.

La réponse est: ça dépend

JODA (et JSR-310) est une bibliothèque de date/heure entièrement fonctionnelle, incluant la prise en charge de plusieurs systèmes de calendrier.

Personnellement, j'ai trouvé que JODA allait trop loin en termes de complexité pour ce dont j'avais besoin.Les 2 erreurs principales (à mon humble avis) dans le Java standard Date et Calendar les cours sont :

  1. Ils sont mutables
  2. Ils mélangent le concept d'année-mois-jour avec celui d'instantané.

Bien que ces problèmes soient résolus par JODA, vous trouverez assez facile de créer vos propres classes pour YearMonthDay et Instant, qui utilisent tous deux les classes Java sous le capot pour de véritables calculs "calendriers".Ensuite, vous n'avez pas besoin de vous familiariser avec une API de plus de 100 classes, un mécanisme de formatage/analyse différent, etc.

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

Le responsable des spécifications du JSR-310 est Stephen Colebourne, qui a écrit JODA en premier lieu, il le sera donc logiquement. remplacer JODA.

Tout dépend de ce que vous faites avec les dates. Si vous êtes tout simplement les persistez, les Java est construit dans les dates feront probablement leur tout ce que vous voulez. Toutefois, si vous faites une vaste manipulation de date de temps, vous êtes probablement mieux avec Joda.

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

  1. Joda-Time soutient le ISO 8601 standard, ce qui est un moyen standard de
    représentation de la date.
  2. Ajout et soustraction d'un jour / mois / année est plus facile à Joda temps que java.util.date.
  3. Une initialisation par une date de donner est beaucoup plus facile à Joda temps.
  4. Joda-Time soutient fuseau horaire ainsi.
  5. Joda-Time a un meilleur intégré l'analyse syntaxique. Une mauvaise date comme « 31/02/2014 » est jeté 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/

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top