¿Debo usar las clases de fecha y hora de Java o ir con una biblioteca de terceros como Joda Time?

Estoy creando un sistema basado en la web que se utilizará en países de todo el mundo. Un tipo de datos que deben almacenarse son las fechas y los horarios.

¿Cuáles son los pros y los contras de utilizar las clases de fecha y hora de Java en comparación con las bibliotecas de terceros, como la hora de Joda ? Supongo que estas bibliotecas de terceros existen por una buena razón, pero nunca las he comparado realmente.

EDITAR: ahora que Java 8 ha sido lanzado, si puedes usarlo, ¡hazlo! java.time es incluso más limpio que Joda Time, desde mi punto de vista. Sin embargo, si estás atrapado pre-Java-8, sigue leyendo …

Max preguntó por los pros y los contras de usar Joda …

Pros:

  • Funciona muy bien. Sospecho fuertemente que hay muchos menos errores en Joda que las bibliotecas estándar de Java. Algunos de los errores en las bibliotecas de Java son realmente difíciles (si no imposibles) de corregir debido al diseño.
  • Está diseñado para alentarlo a pensar en el manejo de la fecha / hora de la manera correcta, separando el concepto de “hora local” (por ejemplo, “despertarme a las 7 a.m. donde sea que esté”) y un instante en el tiempo (“Estoy llamando a James a las 3 p.m. PST; puede que no sean las 3 p.m. donde está, pero es el mismo instante “)
  • Creo que facilita la actualización de la base de datos de la zona horaria, que cambia con relativa frecuencia
  • Tiene una buena historia de inmutabilidad, que hace que la vida sea mucho más fácil IME.
  • A partir de la inmutabilidad, todos los formateadores son seguros para la ejecución de subprocesos, lo que es genial porque casi siempre quiere reutilizar un solo formateador a través de la aplicación
  • Tendrá una ventaja al aprender java.time en Java 8, ya que son al menos algo similares

Contras:

  • Es otra API para aprender (aunque los documentos son bastante buenos)
  • Es otra biblioteca para construir contra y desplegar
  • Cuando utilizas Java 8, todavía hay algo de trabajo para migrar tus habilidades
  • No DateTimeZoneBuilder efectiva en el pasado. Sin embargo, este es un caso de uso muy raro.

Para responder a la idea de oxbow_lakes de construir efectivamente tu propia pequeña API, aquí están mis puntos de vista de por qué esta es una mala idea:

  • Es trabajo. ¿Por qué trabajar cuando ya se ha hecho por usted?
  • Es mucho más probable que un recién llegado a tu equipo esté familiarizado con Joda que con tu API local.
  • Es probable que te equivoques en algo más allá de los usos más simples … e incluso si inicialmente piensas que solo necesitas una funcionalidad simple, estas cosas tienen la costumbre de volverse más complicadas, una por una. La manipulación de fecha y hora es difícil de hacer correctamente. Además, las API Java incorporadas son difíciles de usar de forma adecuada; basta con observar las reglas sobre cómo funciona la aritmética de fecha / hora de la API de calendario. Construir algo encima de estos es una mala idea en lugar de utilizar una biblioteca bien diseñada para empezar.

Bueno, a menos que intente esperar Java 8, con la esperanza de que implementen una API mejor para manipular la fecha y la hora, sí, por favor, use Joda-Time . Es un ahorro de tiempo y evita muchos dolores de cabeza.

La respuesta es: depende

JODA (y JSR-310) es una biblioteca de fecha / hora completamente funcional, que incluye soporte para uso con múltiples sistemas de calendario.

Personalmente, encontré que JODA es un paso demasiado lejos en términos de complejidad para lo que necesito. Los 2 errores principales (en mi humilde opinión) en las clases estándar de Date y Calendar Java son:

  1. Son mutables
  2. Mezclan el concepto de un año-mes-día de un instante-en-tiempo

Aunque JODA se ocupa de estos temas, le resultará bastante sencillo YearMonthDay sus propias clases para YearMonthDay e Instant , que utilizan las clases Java bajo el capó para realizar cálculos “calendáricos”. Entonces no tiene que familiarizarse con una API de> 100 clases, un mecanismo de formateo / análisis diferente, etc.

Por supuesto, si necesita una representación completa de diferentes cronologías (por ejemplo, hebreo) o desea poder definir su propio sistema de calendario imaginario (por ejemplo, para un juego que está escribiendo), entonces tal vez JODA o JRS-310 es para usted. Si no, entonces sugeriría que rodar el suyo es posiblemente el camino a seguir.

El líder de la especificación JSR-310 es Stephen Colebourne, que escribió JODA en el primer lugar, por lo que lógicamente reemplazará a JODA.

Todo depende de lo que estés haciendo con las fechas. Si simplemente los persiste, las Fechas integradas de Java probablemente harán todo lo que usted quiera. Sin embargo, si está realizando una amplia manipulación de fecha y hora, probablemente esté mejor con Joda.

Deberías usar una biblioteca Joda-Time, porque:

  1. Joda-Time es compatible con el estándar ISO 8601 , que es una forma estándar de
    representación de la fecha.
  2. Agregar y restar un día / mes / año es más fácil en Joda-Time que java.util.date.
  3. Una inicialización por una fecha de entrega es mucho más fácil en Joda-Time.
  4. Joda-Time también es compatible con la zona horaria.
  5. Joda-Time tiene un mejor análisis incorporado. Se arroja una fecha incorrecta como “2014-02-31” como un error: Exception in thread "main" org.joda.time.IllegalFieldValueException: Cannot parse "2014-02-31": Value 31 for dayOfMonth must be in the range [1,28].

Puede ser que le guste esta página para más detalles: http://swcodes.blogspot.com/