Joda-time中的LocalDate间隔

时间:2010-12-08 12:43:53

标签: java jodatime

Joda-time有一个Interval类,介于DateTime之间。什么可以用于LocalDate s?

我想要一个对象,例如“从2011年1月1日到10/1/2011”,没有时间(或时区)进入图片。

据我所知,joda-time没有内置任何内容。 如果它没有任何东西,我们创造它,它应该是什么样子?最重要的是,joda-time的哪些接口可以实现最佳集成到其他类型,与joda-time设计保持一致? 它是否有意义实施ReadableInterval,其中getStartgetEnd返回DateMidnight

6 个答案:

答案 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;
   }



}

这对我有用。