Y a-t-il des inconvénients à utiliser Joda-Time?

Je veux convaincre le gestionnaire d’architecture d’inclure le pot Joda-Time dans notre produit.

Connaissez-vous des inconvénients à l’utiliser?

Je pense que Joda-Time doit être constamment mis à jour à cause des fichiers qu’il contient. Et c’est un inconvénient. Peut-être que je me trompe.

Pourriez-vous clarifier le sujet?

J’ai eu des expériences presque entièrement positives avec Joda Time. Mon seul problème a été lorsque j’ai essayé de construire mon propre fuseau horaire (pour des raisons légitimes, je vous assure), j’ai eu des exceptions très étranges, et la documentation n’était pas très bonne pour ce cas particulier d’utilisation.

Cependant, pour la plupart, cela a été un plaisir à utiliser – l’immuabilité rend le code beaucoup plus facile à raisonner et la sécurité des threads pour les formateurs est extrêmement utile.

Oui, il y a des fichiers à tenir à jour – mais au moins vous pouvez les garder à jour. Ce n’est pas comme si elles contenaient des éléments inutiles avec les éléments intégrés à Java, mais avec le mécanisme de Java, vous ne pouviez tout simplement pas tenir à jour des informations telles que des fuseaux horaires, sans avoir à vous soucier de leur piratage!

Fondamentalement, +1 pour utiliser Joda Time. L’API de date / heure Java est l’un des pires bits de la plate-forme Java, IMO.

À mon avis, le plus important inconvénient de Joda-Time concerne la précision: de nombreuses bases de données stockent des horodatages avec une précision en microseconde (voire en nanoseconde ). Joda-time ne va qu’en millisecondes . Ce n’est pas acceptable pour moi: toutes les classes de “modèle de données” que j’utilise doivent refléter toute la précision des données de ma firebase database. Les approximations ou les troncations de mes données par une bibliothèque ne suffisent pas.

Voici le raisonnement derrière le choix de la précision en millisecondes, tirée de la liste de diffusion JSR 310 :

“Joda-Time a choisi d’utiliser des millisecondes pour faciliter les conversions vers Date et Calendar.” – S. Colebourne

Plus facile pour qui? L’auteur de la bibliothèque, on pourrait supposer … Une décision de conception incorrecte, à mon avis, lorsque presque toutes les bases de données stockent des temps de précision microseconde / nanoseconde. Le mépris des valeurs de firebase database est inquiétant.

Le plus gros problème que nous avons rencontré lors de l’utilisation de Joda Time a été l’intégration avec Spring et Tapestry, car ils souhaitaient tous deux utiliser la Date et l’Heure intégrées. Nous écrivions constamment des wrappers dans les getters / setters pour la date et l’heure: soit nous le stockions sous le nom de Joda Time et un ensemble de getters / setters le transmettrait et l’autre le convertirait en Java Date / Time, et le getter / setter de Joda devait le changer à la volée.

Fondamentalement, c’était un casse-tête parce que les classes sont nommées de la même manière, et à moins que vous puissiez faire passer votre architecture (y compris les autres bibliothèques que vous intégrez) à Joda Time, vous allez écrire plus de code en utilisant les bibliothèques Joda.

Parlesys accueille une présentation de Stephen Colebourne sur JSR-310 , M. Colebourne l’auteur de Joda-Time et JSR-310. Il commence par expliquer les faiblesses du support standard de date / heure en Java et pourquoi vous souhaitez utiliser une alternative. Il peut être utile d’afficher cette présentation à votre responsable de l’architecture. Je n’arrive pas à créer un lien profond

La raison pour laquelle Joda-Time met à jour assez souvent son fichier de fuseau horaire est que les données de fuseau horaire changent tout le temps, souvent à court préavis (aujourd’hui sur slashdot: ajout de seconde au 2008-12-31 ) État insulaire a changé son fuseau horaire pour être le premier pays à entrer dans l’an 2000).

Par le passé, j’ai rencontré des sociétés qui ne souhaitaient pas intégrer des logiciels open source tiers, ou du moins obliger l’avocat de la société à certifier que la licence ne les exposerait à aucune responsabilité ou à un virus. effet sur leur produit.

Comme avec toutes les bibliothèques tierces, vous devriez probablement le placer dans le contrôle de code source pour que vous puissiez trouver la version que vous avez livrée avec des versions particulières de votre code au cas où un problème surviendrait.

Le choix de millisecondes pour le continuum temporel sous-jacent est utile pour la mise en œuvre de calendriers de l’Antiquité et de calendriers spéciaux. Contrairement à de nombreux compteurs, le compteur milliseconde 64 bits offre une bonne couverture pour les calendriers de l’antiquité, avec des propriétés de renversement supérieures à +/- 260 millions d’années.

Il ne gère pas les secondes bissextiles. C’est une bonne chose. Les gens de l’horloge atomique proposent une transition en douceur pour permettre aux systèmes qui ne déploient pas de secondes bissextiles d’ajuster de manière incrémentale leurs horloges sur 100 secondes pour s’adapter à la seconde correction.

La maintenance des tables de fuseaux horaires sera également un problème.

Le continuum sous-jacent permet également un calendrier et une horloge français anciens qui divisent un jour en 10 intervalles appelés temps mésortingque au lieu de 24 heures. Le calendrier chinois classique divise un jour en 100 incréments, chacun d’un peu plus de 14 minutes. Tous ces calendriers peuvent être implémentés et coordonnés sur le continuum temporel en millisecondes sous-jacent.

Le problème principal avec le fournisseur est au moins jusqu’à ce qu’il fasse partie de la norme.

Pour l’essentiel, j’utiliserais longtemps pour stocker des informations de date d’entreprise sur une firebase database. Cela me donne la souplesse nécessaire pour ajuster la précision à mon gré. Dans la plupart des cas, je les convertis simplement en java.util.Date.

Les fuseaux horaires que je considérerais comme un problème de niveau de présentation plutôt qu’un problème de données. Cela simplifie la firebase database et augmente la portabilité, car les bases de données peuvent représenter des données temporelles dans différents modes.

La classe de calendrier standard me fournit des fonctions de manipulation des dates que je convertis en millisecondes depuis les données d’époque.

En ce qui concerne la précision à la nanoseconde, je la stockerais en tant que décalage par rapport à 0 en tant que colonne longue séparée.