189 votos

Joda-Time: ¿cuál es la diferencia entre el período, intervalo y duración?

En la Joda de Tiempo de 2, ¿cuál es la diferencia entre los tres tipos de intervalos de tiempo: Período, Intervaloy Duración?

  1. ¿Por qué necesitamos tres clases?

  2. Que uno realiza mejor?

  3. ¿Por qué es dividir un Período o Duración o Intervalo de instancia no se implementa? Por ejemplo. p = p.divideBy(2);

244voto

mikej Puntos 30224

3 clases son necesarias debido a que representan diferentes conceptos así que es cuestión de escoger el más apropiado para el trabajo en lugar de de rendimiento relativo. A partir de la documentación con los comentarios añadidos por mí en cursiva:


Un intervalo en Joda-Tiempo representa un intervalo de tiempo de una milésima de segundo, instante a otro instante. Ambos momentos están completamente especificados instantes en la datetime continuo, se completa con la zona horaria. Momentos específicos son definidos por ej. este podría ser el intervalo entre las 20:00:00 GMT y de ayer, 09:00:00 GMT de esta mañana.

Una duración en Joda-Tiempo representa un periodo de tiempo medidos en milisegundos. La duración es a menudo obtenidos a partir de un intervalo. es decir. podemos restar inicio de la final de un intervalo para derivar una duración

Un período en Joda-Tiempo 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 duración en la que es inexacto en términos de milisegundos. Un período que sólo pueden ser resueltos a un número exacto de milisegundos mediante la especificación de la instantánea (incluyendo la cronología de la zona), lo que es relativo. por ejemplo. considerar el período de 1 año, si sumamos esto al 1 de enero de siempre vamos a llegar en el próximo 1ro de enero, pero la duración va a depender de si el primer año es un año bisiesto o no. De igual manera, si añadimos 1 mes hasta el 1 de un mes, a continuación, vamos a llegar al día 1 del mes próximo, pero la duración (en milisegundos) variarán basado en el mes en cuestión


Para la pregunta 3, Un método específico para dividir una duración no es realmente necesario, ya que siempre podemos obtener el número de milisegundos de duración como long (utilizando getMillis()), la dividen y la construcción de una nueva duración (utilizando new Duration(long duration)).

División de un período en realidad no tiene un significado real basado en la definición de un período anterior. por ejemplo. ¿cuál es la mitad de un mes? (su longitud dependerá de qué mes).

88voto

leonbloy Puntos 27119

Añadir a mikej la respuesta:

Una Joda de la duración es una "física" intervalo de tiempo; por ejemplo:

12000 milliseconds <-- este es un tiempo de duración

Una Joda del intervalo es en realidad un par de instantes (inicio instantáneo de fin de instantánea). Un instante es totalmente datetime especificado (tanto civiles y física). Por ejemplo, (pseudo notación):

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

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

Considere estos dos intervalos de tiempo:

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 y I2 son diferentes; pero, si he de convertir a las duraciones, llego 3600000 milliseconds, por lo tanto las duraciones son iguales.

Finalmente, un período es de un lapso de "civiles tiempo", expresado como un número de meses, días, horas, etc. No-por sí mismo - representan una "física" de intervalo, por lo que no se puede convertir directamente a una duración (meses tienen longitudes variables...).

Esto responde a la pregunta 3: sólo se puede dividir por dos físicos de tiempo (duración).

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X