online joda examples dates java jodatime

java - examples - Joda-Time: ¿cuál es la diferencia entre Período, Intervalo y Duración?



jodatime difference between dates (2)

En Joda-Time 2, ¿cuál es la diferencia entre los tres tipos de intervalos de tiempo:

  • Period
  • Interval
  • Duration

    1. ¿Por qué necesitamos tres clases?

    2. ¿Cuál se comporta mejor?

    3. ¿Por qué no se implementa una instancia de Periodo o Duración o Intervalo? Por ejemplo, p = p.divideBy(2);


Para agregar a la respuesta de mikej :

Una duración Joda-Time es un intervalo de tiempo "físico"; p.ej:

12000 milliseconds <- esta es una duración

Un intervalo Joda-Time es en realidad un par de instantes (inicio instante instante final). Un instante es, de nuevo, un concepto "físico", un punto en la línea de tiempo. Ej. (Solo una posible notación):

(2010/3/3 19:00:00.000 UTC ; 2010/3/3 20:00:00.000 UTC) <- este es un intervalo

Un intervalo , entonces, se puede convertir a una duración , pero no a la inversa.

Considera estos dos intervalos:

I1=(2010/3/3 19:00:00.000 UTC ; 2010/3/3 20:00:00.000 UTC)

I2=(2010/3/3 21:00:00.000 UTC ; 2010/3/3 22:00:00.000 UTC)

Como intervalos, I1 e I2 son diferentes, porque los puntos finales son diferentes; pero si los convierto en duraciones, obtengo lo mismo: 3600000 milliseconds .

(Analogía matemática: los intervalos [10,12] y [95,97] son intervalos diferentes, pero tienen la misma longitud : "longitud de intervalo" se asigna a la duración ).

Finalmente, un período es un lapso de "tiempo civil", expresado como un número de meses, días, horas, etc. No representa en sí mismo un intervalo "físico", por lo tanto, no puede convertirse directamente en un duración (los meses tienen longitudes variables ...).

Responde la pregunta 3: solo puedes dividir por dos un tiempo físico (una duración).


Se necesitan 3 clases porque representan diferentes conceptos, por lo que se trata de elegir el adecuado para el trabajo en lugar de un rendimiento relativo. De la documentation con comentarios agregados por mí en cursiva :

Un intervalo en Joda-Time representa un intervalo de tiempo de un instante de un milisegundo a otro. Ambos instantes son instantes totalmente especificados en el continuo de fecha y hora, completo con zona horaria. Los tiempos específicos se definen, por ejemplo, este podría ser el intervalo entre las 20: 00: 00GMT de ayer y las 09: 00: 00GMT de esta mañana.

Una duración en Joda-Time representa una duración de tiempo medida en milisegundos. La duración a menudo se obtiene de un intervalo. es decir, podemos restar el inicio del final de un intervalo para derivar una duración

Un período en Joda-Time representa un período de tiempo definido en términos de campos, por ejemplo, 3 años, 5 meses, 2 días y 7 horas. Esto difiere de una duración en que es inexacta en términos de milisegundos. Un período solo puede resolverse a una cantidad exacta de milisegundos especificando el instante (incluida la cronología y la zona horaria) en que se relaciona. por ejemplo, considere el período de 1 año, si lo agregamos al 1 de enero siempre llegaremos al próximo 1 de enero, pero la duración dependerá de si el año intermedio es bisiesto o no. Del mismo modo, si agregamos 1 mes al 1er mes, llegaremos al 1 ° del mes siguiente, pero la duración (en milisegundos) variará en función del mes en cuestión.

Para la pregunta 3, no se necesita realmente un método específico para dividir una duración porque siempre podemos obtener el número de milisegundos de la duración como un período long (usando getMillis() ), dividirlo y construir una nueva duración (usando la new Duration(long duration) ).

Dividir un período realmente no tiene un significado real basado en la definición de un período anterior. por ejemplo, ¿qué es medio mes? (su duración dependería de qué mes).