2.5 Quale esigenza della comunità Java sarà affrontata dalla specifica proposta?
Attualmente Java SE ha due API separate per data e ora: java.util.Date e java.util.Calendar. Entrambe le API sono costantemente descritte come difficili da usare dagli sviluppatori Java su weblog e forum. In particolare, entrambi utilizzano un indice zero per mesi, che è causa di molti bug. Calendar ha anche sofferto di molti bug e problemi di prestazioni nel corso degli anni, principalmente a causa della memorizzazione interna del suo stato in due modi diversi.
Un bug classico (4639407) impediva la creazione di determinate date in un oggetto Calendar. Si potrebbe scrivere una sequenza di codice che crei una data in alcuni anni ma non in altri, avendo l'effetto di impedire ad alcuni utenti di inserire le loro date di nascita corrette. Ciò è stato causato dalla classe Calendar che consente solo un guadagno dell'ora legale di un'ora in estate, quando storicamente era più 2 ore nel periodo della seconda guerra mondiale. Anche se questo bug è stato ora risolto, se in futuro un paese scegliesse di introdurre un aumento dell'ora legale di più tre ore in estate, la classe Calendar verrebbe nuovamente interrotta.
L'attuale API Java SE soffre anche in ambienti multi-thread. Le classi immutabili sono note per essere intrinsecamente thread-safe poiché il loro stato non può cambiare. Tuttavia, sia la data che il calendario sono modificabili, il che richiede ai programmatori di considerare esplicitamente la clonazione e il threading. Inoltre, la mancanza di thread-safety in DateTimeFormat non è ampiamente nota ed è stata la causa di molti problemi di threading difficili da rintracciare.
Oltre ai problemi con le classi che Java SE ha per datetime, non ha classi per modellare altri concetti. Le date o le ore senza fuso orario, le durate, i periodi e gli intervalli non hanno alcuna rappresentazione di classe in Java SE. Di conseguenza, gli sviluppatori usano spesso un int per rappresentare una durata di tempo, con javadoc che specifica l'unità.
La mancanza di un modello completo di data e ora fa sì che molte operazioni comuni siano più complicate di quanto dovrebbero essere. Ad esempio, il calcolo del numero di giorni tra due date è attualmente un problema particolarmente difficile.
Questo JSR affronterà il problema di un modello completo di data e ora, comprese date e ore (con e senza fusi orari), durate e periodi di tempo, intervalli, formattazione e analisi.