Joda-time中的LocalDate间隔

Wou*_*rts 29 java jodatime

Joda-time有一个Interval类,它是DateTime之间的范围.什么可以用于一系列的LocalDate

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

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

oli*_*ivr 27

我个人使用Guava 的Range类.

它支持开放式范围.也可以指定包含或排除的边界.在众多可能性中,这些可以容易地表示"在日期之前"或"在日期之后".

开放式间隔的示例.

Range<LocalDate> before2010 = Range.atMost(new LocalDate("2009-12-31"));
Range<LocalDate> alsoBefore2010 = Range.lessThan(new LocalDate("2010-01-01"));
Run Code Online (Sandbox Code Playgroud)

它还包含易于测试的谓词,例如contains和containsAll,以及交叉操作.所有这些测试和维护.


Oli*_*ann 14

区间类表示的时间从一个毫秒时刻到另一时刻(完整的时区)的间隔.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
Run Code Online (Sandbox Code Playgroud)

但是,您搜索的LocalDates间隔(也称为部分(无时区))的概念尚不存在.如果您要自己实现它,请不要实现任何间隔接口.它会干扰你的愿望,因为如前所述,它是基于瞬间的.


Jon*_*eet 7

编辑:糟糕,以前误解了.

不,我知道Joda Time没有任何等价物.

就个人而言,我只想创建自己的类,其中包括开始日期和结束日期:LocalDateInterval或类似的东西.我不会重复使用Interval它,因为它会混淆概念:一对LocalDate不代表两个瞬间,因为本地日期不是真正的瞬间.

我个人认为Interval在Joda Time中没有特别有用......我一直在考虑从Noda Time中删除它.现在听起来我不应该;)