¿Debo usar fecha y hora clases Java o ir con una biblioteca de 3 ª parte como Joda Time?

StackOverflow https://stackoverflow.com/questions/589870

  •  09-09-2019
  •  | 
  •  

Pregunta

Estoy creando un sistema basado en la web que se utiliza en los países de todo el mundo. Un tipo de datos que deben ser almacenados es fechas y horas.

¿Cuáles son los pros y los contras del uso de la fecha y hora de clases Java en comparación con las bibliotecas 3 ª parte como Joda tiempo? Creo que existen estas bibliotecas de terceros por una buena razón, pero en realidad nunca he las comparaba a mí mismo.

¿Fue útil?

Solución

EDIT: Ahora que Java 8 ha sido puesto en libertad, si se puede usar eso, hacerlo! java.time es aún más limpio que Joda Time, en mi opinión. Sin embargo, si estás atascado en Java pre-8, sigue leyendo ...

Max pidió los pros y los contras de la utilización Joda ...

Pros:

  • Se trabaja muy bien. Tengo la firme sospecha 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ícil (si no imposible) para fijar debido al diseño.
  • Está diseñado para animarle a pensar en el manejo de la fecha / hora de la manera correcta - que separa el concepto de una "hora local" (por ejemplo, "me despierta a las 7 am donde quiera que esté") y un instante en el tiempo ( "I' m llamando a James en 15:00 PST, puede que no sea 15:00 dónde está, pero es el mismo instante ")
  • Creo que hace que sea más fácil de actualizar la base de datos de zona horaria, que hace cambiar con relativa frecuencia
  • Tiene una buena historia inmutabilidad, lo que hace que la vida de un mucho IME más fácil.
  • Piloto sobre la inmutabilidad de, todos los formateadores son hilos de proceso seguro, que es grande, ya que casi siempre desea volver a utilizar una sola formateador través de la aplicación
  • Usted tendrá una ventaja inicial en el aprendizaje java.time en Java 8, ya que son al menos algo similar

Contras:

  • Es otra API para aprender (aunque los documentos son bastante buenos)
  • Es otra biblioteca para construir y desplegar contra
  • Cuando se utiliza Java 8, todavía hay algo de trabajo para migrar sus habilidades
  • He fallado a utilizar el DateTimeZoneBuilder efectivamente en el pasado. Se trata de un muy caso de uso poco frecuente, aunque.

Para responder a la idea de los oxbow_lakes' de construir con eficacia su propia pequeña API, aquí están mis puntos de vista de por qué esto es una mala idea:

  • Es un trabajo. ¿Por qué hacer el trabajo cuando ya se ha hecho para usted?
  • Un recién llegado a su equipo es mucho más probable que esté familiarizado con Joda que con su cosecha propia API
  • Es probable que se equivocan para nada más allá de los usos más simples ... e incluso si inicialmente piensa sólo necesita las funciones simples, estas cosas tienen un hábito de crecimiento más complicado, uno poquito a la vez. Fecha y hora manipulación es duro para hacer correctamente. Por otra parte, el built-in de Java APIs son difíciles de utilizar correctamente - basta con ver las reglas de cómo funciona la fecha / hora de la aritmética de la API de calendario. Construyendo nada encima de ellas es una mala idea en lugar de utilizar una biblioteca bien diseñado desde el principio.

Otros consejos

Bueno, a menos que la intención de esperar a que Java 8, con la esperanza de que van a poner en práctica una mejor API para la manipulación de fecha y hora, sí, por favor, utilice Joda-Time . Es hora de ahorrar y evitar muchos dolores de cabeza.

La respuesta es: depende

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

En lo personal he encontrado JODA a ser un paso demasiado lejos en términos de complejidad para lo que necesito. Los 2 principales (mi humilde opinión) errores en las clases Date java y Calendar estándar son:

  1. Ellos son mutables
  2. Se mezclan el concepto de un año-mes-día de un instante-In-Time

A pesar de que éstos son tratados por JODA, usted encontrará que es muy fácil de rodar sus propias clases para YearMonthDay y Instant, que ambos utilizan las clases de Java bajo el capó para los cálculos reales "de calendario". Entonces usted no tiene que familiarizarse con un API de> 100 clases, un formato diferente / análisis mecanismo etc.

Por supuesto, si usted no necesita representación completa de diferentes cronologías (por ejemplo, en hebreo) o si desea ser capaz de 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 yo sugeriría que rodar su propia es, posiblemente, el camino a seguir.

El plomo especificación JSR-310 es Stephen Colebourne que escribió JODA en el 1er lugar, por lo que lógicamente será reemplace JODA.

Todo depende de lo que está haciendo con las fechas. Si simplemente está persistiendo ellos, los de Java construidos en fechas probablemente va a hacer todo lo que desea. Sin embargo, si usted está haciendo una extensa manipulación de fecha y hora, usted es probablemente mejor con Joda.

Se debe utilizar una biblioteca Joda-Time, ya que:

  1. Joda-Time apoya la ISO 8601 estándar, que es una forma estándar de
    representación de la fecha.
  2. Suma y resta de un día / mes / año es más fácil en Joda-Time que java.util.date.
  3. Una inicialización antes de una fecha dan es mucho más fácil en Joda-Time.
  4. Joda-Time soporta zona horaria también.
  5. Joda-Time tiene una mejor integrado en el análisis sintáctico. Una fecha incorrecta como "02/31/2014" se lanza 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].

Es posible que como esta página para más detalles: http://swcodes.blogspot.com/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top