No Joda-Time 2, qual é a diferença entre os três tipos de intervalos de tempo:
No Joda-Time 2, qual é a diferença entre os três tipos de intervalos de tempo:
Respostas:
São necessárias três classes, porque representam conceitos diferentes; portanto, é uma questão de escolher o apropriado para o trabalho, e não de desempenho relativo. Da documentação com comentários adicionados por mim em itálico :
Um intervalo no Joda-Time representa um intervalo de tempo de um milésimo de segundo a outro instante. Ambos os instantes são instantes totalmente especificados no continuum datetime, completo com fuso horário. São definidos horários específicos, por exemplo, este pode ser o intervalo entre 20: 00: 00GMT de ontem e 09: 00: 00GMT desta manhã.
Uma duração em Joda-Time representa uma duração medida em milissegundos. A duração é frequentemente obtida a partir de um intervalo. ou seja, podemos subtrair o início do final de um intervalo para derivar uma duração
Um período no Joda-Time representa um período definido em termos de campos, por exemplo, 3 anos, 5 meses, 2 dias e 7 horas. Isso difere da duração, pois é inexato em termos de milissegundos. Um período só pode ser resolvido para um número exato de milissegundos especificando o instante (incluindo cronologia e fuso horário) em que ele é relativo. por exemplo, considere o período de 1 ano; se adicionarmos a 1º de janeiro, sempre chegaremos no próximo 1º de janeiro, mas a duração dependerá de o ano intermediário ser um ano bissexto ou não. Da mesma forma, se adicionarmos 1 mês ao 1º de um mês, chegaremos ao 1º do próximo mês, mas a duração (em milissegundos) variará com base no mês em questão
Para a pergunta 3, um método específico para dividir uma duração não é realmente necessário porque sempre podemos obter o número de milissegundos da duração como a long
(usando getMillis()
), dividi-lo e construir uma nova duração (usando new Duration(long duration)
).
Dividir um período realmente não tem um significado real com base na definição de um período acima. por exemplo, o que é meio mês? (sua duração dependeria de qual mês).
Para adicionar à resposta de mikej :
Uma duração Joda-Time é um intervalo de tempo "físico"; por exemplo:
12000 milliseconds
<- esta é uma duração
Um intervalo Joda-Time é na verdade um par de instantes (início instantâneo - final instantâneo). Um instante é, novamente, um conceito "físico", um ponto na linha do tempo. Por exemplo (apenas uma notação possível):
(2010/3/3 19:00:00.000 UTC ; 2010/3/3 20:00:00.000 UTC)
<- este é um intervalo
Um intervalo , então, pode ser convertido para uma duração , mas não o inverso.
Considere estes dois 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
são diferentes, porque os pontos finais são diferentes; mas se eu convertê-los para durações, eu recebo a mesma coisa: 3600000 milliseconds
.
(Analogia matemática: os intervalos [10,12]
e [95,97]
são intervalos diferentes , mas eles têm o mesmo comprimento : o "comprimento do intervalo" é mapeado para a duração ).
Finalmente, um período é um lapso de "tempo civil", expresso como um número de meses, dias, horas etc. Ele não representa por si só um intervalo "físico", portanto, não pode ser convertido diretamente em um duração (os meses têm comprimentos variáveis ...).
Isso responde à pergunta 3: você só pode dividir por dois um tempo físico (uma duração).
Period