在Joda-Time 2中,三种时间跨度有什么区别:
需要 3 个类,因为它们代表不同的概念,因此问题是为工作选择合适的类,而不是相对性能。来自文档以及我用斜体添加的评论:
间隔表示从一个毫秒瞬间到另一个瞬间的时间间隔。这两个时刻都是日期时间连续体中完全指定的时刻,包括时区。 具体时间已定义,例如这可能是 2010 年 3 月 22 日 20:00:00 GMT 和 2010 年 3 月 23 日 09:00:00 GMT 之间的时间间隔。 Joda-Time 中的
Aduration 表示以毫秒为单位的持续时间。持续时间通常是从一个时间间隔获得的。 即我们可以用间隔的结束点减去开始点来得出持续时间 Joda-Time中的
period表示以字段定义的时间段,例如3年5个月2天7小时。这与持续时间的不同之处在于它以毫秒为单位是不精确的。周期只能通过指定其相对的时刻(包括年代和时区)来解析为精确的毫秒数。 例如考虑 1 年的周期,如果我们将其添加到 1 月 1 日,我们将始终到达下一个 1 月 1 日,但持续时间将取决于中间年份是否为闰年。同样,如果我们在一个月的第一天添加 1 个月,那么我们将到达下个月的第一天,但持续时间(以毫秒为单位)将根据相关月份而有所不同
对于问题 3,实际上并不需要一种特定的方法来划分持续时间,因为我们总是可以从持续时间中获取毫秒数作为long
(使用
getMillis()
),将其划分并构造一个新的持续时间(使用 new Duration(long duration)
)。根据上面对周期的定义来划分周期并没有真正的意义。例如半个月是什么? (其长度取决于哪个月份)。
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:您只能将物理时间(持续时间)除以二。