Joda-Time:周期,时间间隔和持续时间有什么区别?

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

  • 间隔
  • 持续时间

    1. 为什么我们需要三class?

    2. 哪一个performance更好?

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

需要3个class级,因为他们代表不同的概念,所以这是一个select适当的工作,而不是相对的performance。 从我用斜体添加的注释的文档中:


Joda-Time中的间隔表示从一毫秒瞬间到另一瞬间的时间间隔。 这两个时刻都是在date时间连续体中完全指定的时刻,并且包含时区。 具体的时间被定义为,例如,这可能是昨天的20:00:00GMT和早上的09:00:00GMT之间的时间间隔。

Joda-Time中的持续时间表示以毫秒为单位测量的持续时间。 持续时间通常是从一个时间间隔获得的。 即我们可以从一个时间间隔的末尾减去开始时间来得出一个持续时间

乔达时代的一个时期代表了一段以田地定义的时期,例如3年5个月2天和7个小时。 这与持续时间的不同之处在于毫秒数不准确。 通过指定与时间(包括年代和时区)相关的时间,一个时间段只能被parsing为精确的毫秒数。 例如考虑1年的时间,如果我们在1月1日之前加上这个时间,我们将一直到明年1月1日,但这个时间将取决于这个干预年份是不是一个闰年。 同样,如果我们在一个月的第一个月加1个月,那么我们将在下个月的第一个月到达,但是持续时间(以毫秒为单位)将根据相关月份


对于问题3来说,划分持续时间的具体方法并不是真的需要,因为我们总是可以从持续时间中获取毫秒数(使用getMillis() ),将其分开并构造一个新的持续时间(使用new Duration(long duration) )。

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

要添加到mikej的答案 :

Joda-Time 持续时间是“物理”时间间隔; 例如:

12000 milliseconds < – 这是一个持续时间

乔达时间间隔实际上是一对瞬间 (开始瞬间 – 结束瞬间)。 瞬间是一个“物理”的概念,在时间轴上的一个点。 例如(只是一个可能的符号):

(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

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

最后,一个时期是“民间时间”的stream逝,表示为几个月,几天,几小时等。它本身并不代表一个“物理”间隔,因此它不能直接转换为持续时间 (月份有不同的长度…)。

这回答问题3:你只能分两个物理时间(一个持续时间)。