Lorsque vous examinez le javadoc de la classe Java.util.Date, la plupart des méthodes sont obsolètes. Pourquoi était-ce fait?
Eh bien, pour deux raisons liées. La mise en œuvre du concept de dates et d’heures a été très médiocre et a été remplacée par la classe Calendar
.
La classe Calendar
, bien qu’elle soit une amélioration, laisse beaucoup à désirer également, alors pour un travail sérieux dans le domaine de la Date/Heure, 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é à supplanter l'ancienne Date/Classes de calendrier.
Edit: En réponse à la question spécifique de savoir pourquoi la mise en œuvre est médiocre, les raisons sont multiples. Le JavaDoc le résume comme suit:
Malheureusement, l’API de ces fonctions n’était pas susceptible d’internationalisation.
Outre cette lacune générale (qui couvre des problèmes tels que l’absence de composante de fuseau horaire, ainsi que le formatage de la date qui est mieux géré dans DateFormat
et l’incapacité d’avoir une représentation de calendrier non grégorien), il existe des problèmes spécifiques la classe Date
, y compris le fait que l'année est présentée avec 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 incontestablement la pire API du JDK, il a fallu attendre la version 7 pour tenter de la résoudre.
Date
est mutableDate
ne prend pas en charge les fuseaux horairesCe dernier a conduit à le remplacer par Calendar
. Et le premier, associé à la facilité d'utilisation, a conduit à leur remplacement par Joda-Time / JSR-310 ( Java.time. * Package )
Ils sont obsolètes parce que Date a été écrit le plus rapidement possible à l’époque où ils voulaient précipiter le JDK vers la porte.
Il s'avère que les dates et les calendriers sont difficiles. Ils ont donc créé la classe Calendar, ce qui a beaucoup plus été pensé, afin de gérer les difficultés du travail avec les calendriers.
Ils ont déconseillé d'utiliser les méthodes Date et ont été délégués à Calendar car ils ne souhaitaient pas modifier le comportement des méthodes Date existantes et, éventuellement, supprimer les applications existantes.
Voici une bonne réponse tout droit d’Oracle: http://www.Oracle.com/technetwork/articles/Java/jf14-date-time-2125367.html
Les développeurs Java ont depuis longtemps des problèmes avec la prise en charge inadéquate des cas d'utilisation de date et d'heure par les développeurs ordinaires.
Par exemple, les classes existantes (telles que
Java.util.Date
etSimpleDateFormatter
) ne sont pas thread-safe, ce qui peut entraîner des problèmes de simultanéité pour les utilisateurs - ce que le développeur moyen ne s’attendrait pas à résoudre lors de l’écriture du code de traitement des dates.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 à 1 et les jours à 0 - pas très intuitif....
Java.util.Date
représente un instant sur la timeline - un encapsuleur autour du nombre de millisecondes depuis l'époque UNIX - mais si vous appelez toString (), le résultat suggère qu'il a un fuseau horaire, ce qui provoque la confusion parmi les développeurs.
Je ne connais pas la raison officielle pour laquelle il est déconseillé, mais pour autant que je sache, GregorianCalendar
and Joda-Time opérations de support sur dates, ce qui signifie que vous pouvez ajouter, par exemple, un jour à une date et avoir son mois et son année sont mis à jour en conséquence.
Par exemple, supposons que vous vouliez calculer le lendemain de la date actuelle et que nous sommes le 31 mai; avec Java.util.Date
, vous avez simplement getDays() +1
, qui renvoie 32, et vous devez gérer la certitude que le mois en cours ne dispose pas de 32 jours par vous-même; avec GregorianCalendar
ou Joda.time, l'ajout d'une journée au 31 mai donne un objet représentant le 1er juin, masquant ainsi la complexité de votre vue.