2.5 Quel besoin de la communauté Java sera traité par la spécification proposée?
Actuellement, Java SE dispose de deux API de date et d'heure distinctes: java.util.Date et java.util.Calendar. Les deux API sont systématiquement décrites comme difficiles à utiliser par les développeurs Java sur les blogs et les forums. Notamment, les deux utilisent un index zéro pendant des mois, ce qui est à l'origine de nombreux bugs. Calendar a également souffert de nombreux bogues et problèmes de performances au fil des ans, principalement en raison du stockage de son état de deux manières différentes en interne.
Un bogue classique (4639407) empêchait la création de certaines dates dans un objet Calendar. Une séquence de code pourrait être écrite qui pourrait créer une date dans certaines années mais pas dans d'autres, ayant pour effet d'empêcher certains utilisateurs d'entrer leurs dates de naissance correctes. Cela était dû au fait que la classe Calendar n'autorisait qu'un gain d'heure d'été d'une heure en été, alors qu'historiquement, il était de plus de 2 heures au moment de la seconde guerre mondiale. Bien que ce bogue soit maintenant corrigé, si à un moment donné dans le futur un pays choisissait d'introduire un gain d'heure d'été de plus trois heures en été, alors la classe Calendar serait à nouveau interrompue.
L'API Java SE actuelle souffre également dans les environnements multithreads. Les classes immuables sont connues pour être intrinsèquement thread-safe car leur état ne peut pas changer. Cependant, la date et le calendrier sont mutables, ce qui oblige les programmeurs à envisager explicitement le clonage et le threading. En outre, le manque de sécurité des threads dans DateTimeFormat n'est pas largement connu et a été la cause de nombreux problèmes de threads difficiles à détecter.
Outre les problèmes avec les classes que Java SE a pour datetime, il n'a pas de classes pour modéliser d'autres concepts. Les dates ou heures, durées, périodes et intervalles hors fuseau horaire n'ont pas de représentation de classe dans Java SE. En conséquence, les développeurs utilisent fréquemment un int pour représenter une durée, avec javadoc spécifiant l'unité.
L'absence d'un modèle complet de date et d'heure rend également de nombreuses opérations courantes plus délicates qu'elles ne devraient l'être. Par exemple, calculer le nombre de jours entre deux dates est un problème particulièrement difficile à l'heure actuelle.
Ce JSR abordera le problème d'un modèle complet de date et d'heure, y compris les dates et heures (avec et sans fuseaux horaires), les durées et périodes de temps, les intervalles, le formatage et l'analyse.