Joda-Time:Period,Interval和Duration之间有什么区别?

Ger*_*ard 189 java jodatime

Joda-Time 2中,三种时间跨度有什么区别:

  • 间隔
  • 持续时间

    1. 为什么我们需要三节课?

    2. 哪一个表现更好?

    3. 为什么未分割 Period或Duration或Interval实例?例如p = p.divideBy(2);

mik*_*kej 244

需要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)).

根据上述时期的定义,划分一个时期并不具有真正的意义.比如半个月呢?(其长度取决于哪个月).

  • Jodatime认为一个时期是INTEGER值字段的元组,它不允许小数值.这与普通(民用)一致.实际上,没有人在普通生活中认为"1个月和10天"除以2是"半个月零5天".如果你需要进行这种划分,你可能想要持续一段时间(物理时间). (11认同)

leo*_*loy 88

要添加到mikej的答案:

约达时间 的持续时间是"物理"的时间间隔; 例如:

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.

  • 由于夏令时,@ Richard Watson Days可以长23,24或25小时.因此,"从......开始的一天三分之一"是有效的,但只有"三分之一"不是. (4认同)
  • 我认为你可以得到一致的定义,但你必须把它想象为"2个月和18天"的1/3.在将其转换为间隔之前,您将无法确切地确定它是什么.仅仅因为JODA不支持它并不意味着它无效. (3认同)