在尤达-时间 2中,三种时间跨度之间的区别是什么:
1. Why do we need three classes?
2. Which one performs better?
3. Why is _dividing_ a Period or Duration or Interval instance not implemented? E.g. `p = p.divideBy(2);`
发布于 2010-04-16 14:25:45
需要3个类,因为它们代表不同的概念,所以这是为工作选择合适的类,而不是相对性能的问题。在文档中添加了我用斜体表示的评论
interval 以Joda-Time表示从一毫秒到另一毫秒的时间间隔。这两个瞬间都是日期时间连续体中的完全指定的时间点,都是带有时区的。定义了特定的时间,例如,这可能是昨天格林尼治时间20:00到今天上午9:00之间的间隔。
以Joda为单位的工期表示以毫秒为单位的持续时间。持续时间通常是从间隔中获得的。也就是说,我们可以从间隔的末尾减去开始,得到一个持续时间。
Joda时间中的周期表示以字段定义的一段时间,例如3年、5个月、2天和7小时。这与持续时间不同,因为它以毫秒为单位不精确。一个时间段只能通过指定相对于它的瞬间(包括时间序列和时区)来解析为毫秒的确切数目。以1年为例,如果我们把这个加到1月1日,我们总是会在下一个1月1日到达,但持续时间将取决于间隔年是否是闰年。同样,如果我们将一个月的一个月加到一个月的第一天,那么我们就会在下一个月的第一天到达,但是持续时间(以毫秒为单位)将根据有关月份的不同而变化。
对于问题3,实际上并不需要使用特定的方法来划分持续时间,因为我们总是可以以long的形式从持续时间中获得毫秒数(使用getMillis()),并划分它并构造一个新的持续时间(使用new Duration(long duration))。
基于以上时期的定义,划分一个时期实际上没有真正的意义。半个月是什么?(其长度将取决于哪个月)。
发布于 2010-04-16 15:18:21
添加到米基的回答
A 尤达-时间 是“物理”时间间隔;例如:
12000 milliseconds <--这是一个持续时间
Joda时间间隔( Joda-Time interval )实际上是一对实例(启动即时结束瞬间)。即时也是一个“物理”概念,是时间线中的一个点。例(只是一个可能的符号):
(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:你只能除以两个物理时间(一个持续时间)。
https://stackoverflow.com/questions/2653567
复制相似问题