2.5 ¿Qué necesidad de la comunidad Java se abordará con la especificación propuesta?
Actualmente, Java SE tiene dos API de fecha y hora independientes: java.util.Date y java.util.Calendar. Los desarrolladores de Java describen constantemente ambas API como difíciles de usar en blogs y foros. En particular, ambos usan un índice cero durante meses, lo que es la causa de muchos errores. Calendar también ha sufrido muchos errores y problemas de rendimiento a lo largo de los años, principalmente debido a que almacena su estado de dos formas diferentes internamente.
Un error clásico (4639407) impidió que se crearan determinadas fechas en un objeto Calendario. Se podría escribir una secuencia de código que podría crear una fecha en algunos años pero no en otros, teniendo el efecto de evitar que algunos usuarios ingresen sus fechas de nacimiento correctas. Esto se debió a que la clase Calendario solo permitía una ganancia de horario de verano de una hora en verano, cuando históricamente era más 2 horas en la época de la Segunda Guerra Mundial. Si bien este error ahora está solucionado, si en algún momento en el futuro un país opta por introducir una ganancia de horario de verano de más tres horas en verano, la clase de Calendario volvería a romperse.
La API de Java SE actual también sufre en entornos de subprocesos múltiples. Se sabe que las clases inmutables son inherentemente seguras para subprocesos, ya que su estado no puede cambiar. Sin embargo, tanto la fecha como el calendario son mutables, lo que requiere que los programadores consideren la clonación y el subproceso explícitamente. Además, la falta de seguridad de subprocesos en DateTimeFormat no es ampliamente conocida y ha sido la causa de muchos problemas de subprocesos difíciles de rastrear.
Además de los problemas con las clases que tiene Java SE para datetime, no tiene clases para modelar otros conceptos. Las fechas u horas sin zona horaria, las duraciones, los períodos y los intervalos no tienen representación de clase en Java SE. Como resultado, los desarrolladores utilizan con frecuencia un int para representar una duración de tiempo, con javadoc especificando la unidad.
La falta de un modelo completo de fecha y hora también hace que muchas operaciones comunes sean más complicadas de lo que deberían ser. Por ejemplo, calcular el número de días entre dos fechas es un problema particularmente difícil en la actualidad.
Este JSR abordará el problema de un modelo completo de fecha y hora, incluidas fechas y horas (con y sin zonas horarias), duraciones y períodos de tiempo, intervalos, formato y análisis.