[英]Joda-Time: what's the difference between Period, Interval and Duration?
需要3个类,因为它们代表不同的概念,因此需要选择适当的工作而不是相对性能。 来自我用斜体添加的评论的文档 :
在约达时间的时间间隔表示时间从一毫秒时刻到另一时刻的间隔。 两个时刻都是日期时间连续体中的完全指定的时刻,并带有时区。 具体时间定义为例如,这可能是昨天20:00:00GMT和今天早上09:00:00GTT之间的间隔。
在约达-的持续时间表示以毫秒计的时间的持续时间。 持续时间通常从间隔获得。 即我们可以从间隔的末尾开始减去以得出持续时间
在约达-时间段表示在一段时间中的字段来定义,例如,3年5月2天及7小时。 这与持续时间的不同之处在于它以毫秒为单位是不精确的。 通过指定相对于的时刻(包括时间顺序和时区),只能将句点解析为精确的毫秒数。 例如,考虑1年的时间,如果我们将其添加到1月1日,我们将始终在1月1日到达,但持续时间将取决于干预年是否是闰年。 同样地,如果我们将1个月添加到1个月的第1个月,那么我们将在下个月的第1个月到达,但持续时间(以毫秒为单位)将根据所讨论的月份而变化
问题3,是不是真的需要来划分时间的具体方法,因为我们总是可以从持续时间获得的毫秒数为long
(使用getMillis()
把它和建造一个新的持续时间(使用new Duration(long duration)
)。
根据上述时期的定义,划分一个时期并不具有真正的意义。 比如半个月呢? (其长度取决于哪个月)。
要添加到mikej的答案 :
Joda-Time 持续时间是“物理”时间间隔; 例如:
12000 milliseconds
< - 这是一个持续时间
Joda-Time 间隔实际上是一对瞬间 (开始即时 - 结束瞬间)。 瞬间又是一个“物理”概念,即时间轴上的一个点。 例如(只是一种可能的表示法):
(2010/3/3 19:00:00.000 UTC ; 2010/3/3 20:00:00.000 UTC)
< - 这是一个间隔
然后, 间隔可以转换为持续时间 ,但不能反转。
考虑这两个区间:
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)
作为区间, I1
和I2
是不同的,因为终点是不同的; 但如果我将它们转换为持续时间,我会得到同样的东西: 3600000 milliseconds
。
(数学类比:区间[10,12]
和[95,97]
是不同的区间 ,但它们具有相同的长度 : “区间长度”映射到持续时间 )。
最后,一段时间是“民用时间”的流逝,表示为数月,日,小时等。它本身不代表“物理”间隔,因此不能直接转换为持续时间 (月份有不同的长度......)。
这回答了问题3:你只能将物理时间(持续时间)除以2。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.