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

2022-08-31 06:19:35

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

  • 时期
  • 间隔
  • 期间

    1. 为什么我们需要三个类?

    2. 哪一个表现更好?

    3. 为什么未实现划分周期、持续时间或间隔实例?例如:p = p.divideBy(2);


答案 1

需要3个类,因为它们代表不同的概念,所以这是为工作选择合适的类而不是相对性能的问题。从文档中,我用斜体字添加了注释:


Joda-Time 中的间隔表示从一毫秒的瞬间到另一个瞬间的时间间隔。这两个即时都是日期时间连续体中完全指定的即时,并配有时区。定义了特定的时间,例如,这可能是昨天的20:00:00GMT和今天早上09:00:00GMT之间的间隔。

Joda-Time 为单位的持续时间表示以毫秒为单位的持续时间。持续时间通常从间隔获得。也就是说,我们可以从区间的末尾减去起点,得出持续时间

Joda-Time 中的时间段表示根据字段定义的时间段,例如,3 年 5 个月 2 天和 7 小时。这与持续时间的不同之处在于,它在毫秒数方面是不精确的。一个时间段只能通过指定它相对于的即时(包括时间顺序和时区)来解析为确切的毫秒数。例如,考虑1年的期限,如果我们将其添加到1月1日,我们将始终在下一个1月1日到达,但持续时间将取决于中间的年份是否是闰年。同样,如果我们在一个月的1号上加上1个月,那么我们将到达下个月的1号,但持续时间(以毫秒为单位)将根据所讨论的月份而有所不同。


对于问题3,实际上并不需要一种划分持续时间的特定方法,因为我们总是可以从持续时间中获取毫秒数(使用),将其除以并构造新的持续时间(使用)。longgetMillis()new Duration(long duration)

根据上面一个句点的定义,划分一个句点并没有真正的含义。例如,什么是半个月?(其长度取决于哪个月)。


答案 2

补充一下 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)

作为间隔,并且是不同的,因为端点是不同的;但是如果我将它们转换为持续时间,我得到同样的东西:.I1I23600000 milliseconds

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

最后,句点是“民事时间”的流逝,表示为月,天,小时等。它本身并不代表“物理”间隔,因此它不能直接转换为持续时间(月份具有可变长度...)。

这回答了问题3:在物理时间(持续时间)上,您只能除以二。


推荐