Respuestas:
Se necesitan 3 clases porque representan conceptos diferentes, por lo que se trata de elegir el apropiado para el trabajo en lugar de un rendimiento relativo. De la documentación con comentarios añadidos por mí en cursiva :
Un intervalo en Joda-Time representa un intervalo de tiempo de un milisegundo instantáneo a otro instantáneo. Ambos instantes son instantes completamente especificados en el continuo de fecha y hora, completo con zona horaria. Se definen tiempos específicos, 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 obtener una duración
UNA 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 inexacto en términos de milisegundos. Un período solo se puede resolver a un número exacto de milisegundos especificando el instante (incluida la cronología y la zona horaria) con el que se relaciona. por ejemplo, considere el período de 1 año, si agregamos esto 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 1 de un mes, llegaremos al 1 del mes siguiente, pero la duración (en milisegundos) variará según el mes en cuestión
Para la pregunta 3, un método específico para dividir una duración no es realmente necesario porque siempre podemos obtener el número de milisegundos de la duración como un long
(usar getMillis()
), dividirlo y construir una nueva duración (usar 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á de qué mes).
Para agregar a la respuesta de mikej :
Una duración de 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 instantáneo - final instantáneo). Un instante es, nuevamente, un concepto "físico", un punto en la línea de tiempo. Por ejemplo (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, puede convertirse a una duración , pero no a la inversa.
Considere 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
y I2
son diferentes, porque los puntos finales son diferentes; pero si los convierto a 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 : la "longitud del 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, por sí mismo, un intervalo "físico", por lo tanto, no puede convertirse directamente en un duración (los meses tienen longitudes variables ...).
Esto responde a la pregunta 3: solo puedes dividir por dos un tiempo físico (una duración).
Period