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


192

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

  • 间隔
  • 持续时间

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

    2. 哪个表现更好?

    3. 为什么不执行对Period,Duration或Interval实例的划分?例如p = p.divideBy(2);


3
请注意,此日期时间术语尚未标准化(尚未)。在ISO-8601一个标准的想法持续时间是什么乔达时间考虑了Period。已经提出了使这种术语标准化的提议,但是尚未完成。
罗勒·布尔克

Answers:


246

需要3个类,因为它们表示不同的概念,因此要针对工作选择合适的类,而不是相对的性能。在文档中,我用斜体添加了注释:


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

持续时间在约达时间表示以毫秒计的时间的持续时间。持续时间通常是从一个间隔中获得的。即我们可以从间隔结束处减去开始以得出持续时间

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


对于问题3,确实没有必要使用特定的方法来划分持续时间,因为我们总是可以从持续时间中获得毫秒数long(使用getMillis()),对其进行划分并构造新的持续时间(使用new Duration(long duration))。

根据上述期间的定义,划分期间实际上并没有真正的意义。例如,半个月是什么?(其长度取决于哪个月)。


1
我认为划分时间段确实有其含义-半个月仍然是有效的时间单位,但是它需要一个开始日期才能确切知道多长时间(以完全相同的方式,一个月就是一个有效时间段)。
哈德利2011年

11
Jodatime认为周期是INTEGER值字段的元组,它不允许小数。这与常见的(民用)用法是一致的。实际上,在日常生活中没有人认为“ 1个月10天”除以2是“半个月5天”。如果需要进行该划分,则可能需要进行一个持续时间(物理时间)。
leonbloy 2011年

90

添加到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。


四个月除以两个将是两个月。为什么这样无效?
哈德利2011年

1
您将如何计算'2个月;18天除以3?您无法对此类操作获得一致的定义。
leonbloy 2011年

3
我认为您可以获得一致的定义,但是您必须将其视为“ 2个月零18天”时间的1/3。除非将其转换为间隔,否则您将无法确切知道它的含义。仅仅因为JODA不支持它并不意味着它是无效的。
哈德利2011年

@hadley没有“一天的三分之一”的民事定义。例如,没有合同在一天的三分之一内有效。
ipavlic 2012年

4
由于夏令时,@ Richard Watson Days可以长达23、24或25小时。因此,“从...开始的一天的三分之一”是有效的,但仅“三分之一”是无效的。
ipavlic 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.