繁体   English   中英

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

[英]Joda-Time: what's the difference between Period, Interval and Duration?

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

  • 间隔
  • 持续时间

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

    2. 哪一个表现更好?

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

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

作为区间, I1I2是不同的,因为终点是不同的; 但如果我将它们转换为持续时间,我会得到同样的东西: 3600000 milliseconds

(数学类比:区间[10,12][95,97]是不同的区间 ,但它们具有相同的长度“区间长度”映射到持续时间 )。

最后,一段时间是“民用时间”的流逝,表示为数月,日,小时等。它本身不代表“物理”间隔,因此不能直接转换为持续时间 (月份有不同的长度......)。

这回答了问题3:你只能将物理时间(持续时间)除以2。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM