Joda-time有一个Interval类,介于DateTime之间。什么可以用于LocalDate s?
我想要一个对象,例如“从2011年1月1日到10/1/2011”,没有时间(或时区)进入图片。
据我所知,joda-time没有内置任何内容。
如果它没有任何东西,我们创造它,它应该是什么样子?最重要的是,joda-time的哪些接口可以实现最佳集成到其他类型,与joda-time设计保持一致?
它是否有意义实施ReadableInterval
,其中getStart
和getEnd
返回DateMidnight
?
答案 0 :(得分:27)
我个人使用Guava的Range类。
它支持开放式范围。也可以指定包含或排除的边界。在众多可能性中,这些可以容易地表示“在约会之前”或“在约会之后”。
开放式间隔的示例。
Range<LocalDate> before2010 = Range.atMost(new LocalDate("2009-12-31"));
Range<LocalDate> alsoBefore2010 = Range.lessThan(new LocalDate("2010-01-01"));
它还包含易于测试的谓词,例如contains和containsAll,以及交叉操作。所有这些都经过测试和维护。
答案 1 :(得分:14)
Interval类表示从一毫秒瞬间到另一个瞬间的时间间隔(以时区结束)。 DateMidnight就是这样的瞬间。所以你建议实现DateMidnights的间隔就已经存在了。
Interval i = new Interval(
new DateMidnight(2010, 3, 2), new DateMidnight(2010, 3, 5));
i.contains(new DateTime(2010, 3, 1, 23, 59, 59, 999)); // == false
i.contains(new DateTime(2010, 3, 2, 0, 0, 0, 0)); // == true
i.contains(new DateTime(2010, 3, 4, 23, 59, 59, 999)); // == true
i.contains(new DateTime(2010, 3, 5, 0, 0, 0, 0)); // == false
然而,LocalDates又称为部分(没有时区)的搜索间隔的概念尚不存在。如果您要自己实现它,请不要实现任何间隔接口。它会干扰你的愿望,因为正如之前所说,它是基于瞬间的。
答案 2 :(得分:7)
不,我所知道的Joda Time没有任何等效内容。
就个人而言,我只想创建自己的类,包括开始和结束日期:LocalDateInterval
或类似的东西。我不会重复使用Interval
,因为它会使概念混淆:一对LocalDate
值不会表示两个时刻,因为当地日期不是真正的瞬间。
就个人而言,我并不认为Interval
在Joda Time中特别有用......我一直在考虑从Noda Time中删除它。现在听起来我不应该;)
答案 3 :(得分:4)
请注意,在DST开关上使用DateMidnight
将失败。最好使用date.toDateTimeAtStartOfDay()
进行转换。
答案 4 :(得分:2)
我也需要LocalDate对象的间隔,但JodaTime不支持它。 所以我必须创建自己的实现。后来我决定对它进行一些改进并开源。
您可以查看:https://github.com/serddmitry/joda-interval(可在Maven Central上找到)。
答案 5 :(得分:1)
public class LocalDateInterval {
private LocalDate begin;
private LocalDate end;
public LocalDateInterval(LocalDate begin, LocalDate end) {
this.begin = begin;
this.end = end;
}
}
这对我有用。