在Joda-Time 2 中,三种时间跨度有什么区别:
期间
为什么我们需要三个类?
哪一个表现更好?
为什么没有实现 划分 Period 或 Duration 或 Interval 实例?例如p = p.divideBy(2);
p = p.divideBy(2);
需要 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,实际上并不需要特定的方法来划分持续时间,因为我们总是可以从持续时间中获取毫秒数作为long(使用getMillis()),划分它并构造一个新的持续时间(使用new Duration(long duration))。
long
getMillis()
new Duration(long duration)
根据上述期间的定义,划分期间并没有真正的意义。例如什么是半个月?(它的长度取决于哪个月)。