Pourquoi la plupart des méthodes java.util.Date sont-elles obsolètes?

Lorsque vous examinez le javadoc de la classe java.util.Date, la plupart des méthodes sont obsolètes. Pourquoi cela a-t-il été fait?

Eh bien, pour deux raisons connexes. C’était une très mauvaise implémentation du concept de dates et de temps et il a été remplacé par la classe de Calendar .

La classe Calendar , bien qu’elle constitue une amélioration, laisse également beaucoup à désirer, alors, pour un travail sérieux sur Date / Time, tout le monde recommande Joda-Time . Java 8 apporte le nouveau package java.time. * , Inspiré de Joda-Time, défini par JSR-310 , et destiné à remplacer les anciennes classes Date / Calendar.

Edit: En réponse à la question spécifique de savoir pourquoi la mise en œuvre est médiocre, il y a de nombreuses raisons. Le JavaDoc le résume comme suit:

Malheureusement, l’API pour ces fonctions n’était pas compatible avec l’internationalisation.

En plus de cette lacune générale (qui couvre des problèmes tels que l’absence d’un composant Time Zone ainsi que le formatage des dates mieux géré par DateFormat et l’impossibilité d’avoir une représentation de calendrier non grégorien), certains problèmes spécifiques la classe Date , y compris le fait que cette année est présentée en un décalage de 1900 par rapport à l’année de l’ère commune.

Calendar a ses propres problèmes, mais même dès JDK 1.1, il était évident que java.util.Date n’allait pas le couper. Même si Calendar est discutable, la pire des API JDK, il a fallu attendre la version 7 pour tenter de le résoudre.

  • Date est mutable
  • Date n’a pas de support pour les fuseaux horaires

Ce dernier a conduit à son remplacement par le Calendar . Et la première, combinée à la facilité d’utilisation, les a toutes deux remplacées par Joda-Time / JSR-310 ( package java.time. * )

Ils sont désapprouvés parce que Date a été écrite aussi vite que possible dans le jour où ils voulaient précipiter le JDK par la porte.

Il s’avère que les dates et les calendriers sont difficiles. Ainsi, ils ont créé la classe Calendar, qui a été beaucoup plus pensée, afin de gérer les parties difficiles du travail avec les calendriers.

Ils ont déprécié les méthodes Date et les ont déléguées à Calendar car elles ne souhaitaient pas modifier le comportement des méthodes Date existantes et éventuellement interrompre les applications existantes.

Voici une bonne réponse directement d’Oracle: http://www.oracle.com/technetwork/articles/java/jf14-date-time-2125367.html

Un des bugs de longue date des développeurs Java a été la prise en charge inadéquate des cas d’utilisation des dates et des heures par les développeurs ordinaires.

Par exemple, les classes existantes (telles que java.util.Date et SimpleDateFormatter ) ne sont pas SimpleDateFormatter avec SimpleDateFormatter threads, ce qui peut entraîner des problèmes de concurrence pour les utilisateurs.

Certaines classes de date et d’heure présentent également une conception d’API assez médiocre. Par exemple, les années dans java.util.Date commencent à 1900, les mois commencent à 1 et les jours commencent à 0, ce qui n’est pas très intuitif.

java.util.Date représente un instant sur le scénario – un wrapper autour du nombre de millisecondes écoulé depuis l’époque UNIX – mais si vous appelez toSsortingng (), le résultat suggère qu’il a un fuseau horaire, provoquant une confusion chez développeurs.

Je ne connais pas la raison officielle pour laquelle il est obsolète, mais pour autant que je puisse dire les opérations de support GregorianCalendar et Joda-Time aux dates, ce qui signifie que vous pouvez append, par exemple, un jour à une date et avoir son mois et année mise à jour en conséquence.

Par exemple, disons que vous voulez calculer le jour après la date actuelle et que nous sums aujourd’hui le 31 mai; avec java.util.Date , vous avez juste getDays() +1 , qui retourne 32, et vous devez savoir que le mois en cours n’a pas 32 jours par vous-même; avec GregorianCalendar ou Joda.time, l’ajout d’un jour au 31 mai donne un object représentant le 1er juin, masquant la complexité de votre vue.