【发布时间】:2014-04-04 17:38:10
【问题描述】:
我正在评估将我的项目从使用 Joda-Time 迁移到 Java 8 中的 java.time package。在 Joda-Time 中,我大量使用了 Interval 类。我在 java.time 中找不到类似的东西。
有类似的类吗?
【问题讨论】:
我正在评估将我的项目从使用 Joda-Time 迁移到 Java 8 中的 java.time package。在 Joda-Time 中,我大量使用了 Interval 类。我在 java.time 中找不到类似的东西。
有类似的类吗?
【问题讨论】:
JDK 8 JSR-310 没有Interval 类。对区间的概念进行了分解,以确保可以完成库的其余部分。
ThreeTen-Extra 项目托管其他非 JDK 日期时间类,v0.9 包括 Interval。
注意:答案于 2014 年 12 月 10 日更新,在 ThreeTen-Extra 中包含 Interval。
【讨论】:
Interval 的引入可能会令人困惑、模棱两可和危险。很危险,因为 Interval 仍在确切日期的范围内(它有结束日期和开始日期),这很容易被错过?我认为Interval 的省略使它成为一个更干净的实现? Period 和 Duration 对我来说是没有戏剧性的替代品。
使用 Guava 中的 Range 类。
【讨论】:
类 java.time.Duration 可能会为您提供类似的功能。总的来说java 8的时间包非常全面灵活
【讨论】:
Duration 没有开始/结束时间。 Interval 会。
对不起,JSR-310 中没有与 JodaTime-Interval-class 等效的东西。我怀疑这是否会发生,但项目负责人 Stephen Colebourne 考虑至少在他的外部库 Threeten-Extra 的范围内支持它,请参阅issue。
如果您对 JodaTime 感到满意,您应该保留它。并非 JodaTime 中的所有内容都移植到 Java 8(间隔不是唯一的问题)。
2014 年 12 月 13 日更新:
Java-8 中的情况并没有改变,但您也可以考虑 Joda-Time 之外的其他外部库。自 v0.9 以来现在包含一个非常简单的间隔类的 Threeten-Extra(请参阅此处 S. Colebourne 的另一个答案)或我的库 Time4J,它自 v2.0 以来提供the range package。
【讨论】:
Duration(以及Period)没有锚定在给定的时间线上,这意味着没有定义的开始时间,只有一个长度。相比之下,间隔总是有开始时间和结束时间。