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

问题描述 投票:0回答:2

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

  • 期间
  • 间隔
  • 持续时间

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

    2. 哪一个表现更好?

    3. 为什么dividing一个Period或Duration或Interval实例没有实现?例如。

      p = p.divideBy(2);

java jodatime
2个回答
259
投票

需要 3 个类,因为它们代表不同的概念,因此问题是为工作选择合适的类,而不是相对性能。来自文档以及我用斜体添加的评论:


Joda-Time 中的

间隔表示从一个毫秒瞬间到另一个瞬间的时间间隔。这两个时刻都是日期时间连续体中完全指定的时刻,包括时区。 具体时间已定义,例如这可能是 2010 年 3 月 22 日 20:00:00 GMT 和 2010 年 3 月 23 日 09:00:00 GMT 之间的时间间隔。 Joda-Time 中的

A

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

period

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

对于问题 3,实际上并不需要一种特定的方法来划分持续时间,因为我们总是可以从持续时间中获取毫秒数作为
long

(使用

getMillis()
),将其划分并构造一个新的持续时间(使用
 new Duration(long duration)
)。
根据上面对周期的定义来划分周期并没有真正的意义。例如半个月是什么? (其长度取决于哪个月份)。


94
投票
mikej的答案

A

Joda-Time

duration 是“物理”时间间隔;例如:

12000 milliseconds


Joda-Time <-- this is a duration

间隔

实际上是一对瞬间(开始瞬间 - 结束瞬间)。再次强调,“瞬间”是一个“物理”概念,是时间轴上的一个点。例如(只是一个可能的符号): (2010/3/3 19:00:00.000 UTC ; 2010/3/3 20:00:00.000 UTC)

那么,

间隔
可以转换为<-- this is an interval

持续时间

,但反之则不行。 考虑这两个间隔:

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]

是不同的

间隔
,但它们具有相同的
长度
“间隔长度”映射到持续时间)。 最后,period是“民用时间”的流逝,以月数、天数、小时数等表示。它本身并不代表“物理”间隔,因此不能直接表示转换为

持续时间

(月份的长度可变......)。 这回答了问题 3:您只能将物理时间(持续时间)除以二。

© www.soinside.com 2019 - 2024. All rights reserved.