以 Joda 时间为单位的本地日期间隔

2022-09-01 11:40:44

Joda-time 有一个 Interval 类,它是 DateTimes 之间的范围。什么可以用于一系列本地日期

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

据我所知,joda-time并没有内置任何东西。如果它不存在任何东西,我们会创造它,它应该是什么样子?最重要的是,它可以实现哪些来自joda-time的接口,以最好地集成到其他类型中,与joda-time设计保持一致?它实现,在哪里并返回是否有意义?ReadableIntervalgetStartgetEndDateMidnight


答案 1

我个人使用番石榴的Range类。

它支持开放式范围。还可以指定包含或排除的边界。在其他众多可能性中,这些可能性允许轻松表示“日期之前”或“日期之后”。

开放式间隔的示例。

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

它还提供了简单的测试谓词,如 contains 和 containsAll,以及交集操作。所有这些都经过了测试和维护。


答案 2

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(即部分(没有时区))间隔的概念尚不存在。如果您要自己实现它,请不要实现任何间隔接口。它会干扰你的愿望,因为如前所述,它是基于瞬间的。


推荐