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

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

  • 周期
  • Interval .
  • < p > 持续时间

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

    2. 哪个表现更好?

    3. 为什么划分一个周期或持续时间或间隔实例没有实现?例如p = p.divideBy(2);

    4. 李< / ol > < / >
71281 次浏览

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


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

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

Joda-Time中的表示根据字段定义的一段时间,例如,3年5个月2天7小时。这与持续时间的不同之处在于,它以毫秒为单位不精确。一个周期只能通过指定它相对的瞬间(包括年表和时区)解析为精确的毫秒数。例如,考虑1年的周期,如果我们把它加到1月1日,我们总是会到达下一个1月1日,但持续时间将取决于中间的年份是否是闰年。类似地,如果我们在一个月的1号加上1个月,那么我们将到达下个月的1号,但持续时间(以毫秒为单位)将根据所讨论的月份而变化


对于问题3,实际上并不需要特定的方法来分割持续时间,因为我们总是可以从持续时间中获得作为long的毫秒数(使用getMillis()),分割它并构造一个新的持续时间(使用new Duration(long duration))。

根据上面对周期的定义来划分周期并没有真正的意义。半个月是多少?(它的长度取决于哪个月)。

添加到mikej的回答:

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

12000 milliseconds <这是一个持续时间

Joda-Time 时间间隔实际上是一对瞬间(开始即时-结束即时)。即时同样是一个“物理”概念,是时间轴上的一个点。Eg(只是一个可能的符号):

(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。