一尘不染

乔达时间中的包含日期范围检查

java

我正在使用Joda Time 2.1库。

我已经编写了一种比较给定日期是否在日期范围之间的方法。我希望它包含开始日期和结束日期。LocalDate我已经习惯了,因为我不想考虑时间部分仅是日期部分。

下面是它的代码。

isDateBetweenRange(LocalDate start,LocalDate end,LocalDate target){

       System.out.println("Start Date : "
              +start.toDateTimeAtStartOfDay(DateTimeZone.forID("EST"));

       System.out.println("Target Date : "
              +targettoDateTimeAtStartOfDay(DateTimeZone.forID("EST"));

       System.out.println("End Date : "
              +end.toDateTimeAtStartOfDay(DateTimeZone.forID("EST"));

       System.out.println(target.isAfter(start));

       System.out.println(target.isBefore(end));
}

上面方法的输出是:

Start Date: 2012-11-20T00:00:00.000-05:00
Target Date: 2012-11-20T00:00:00.000-05:00
End Date : 2012-11-21T00:00:00.000-05:00
target.isAfter(start) : false
target.isBefore(end) : true

我的问题是target.isAfter(start)错误的,即使target日期和start具有相同的值。

我想要那个,target >= start但这里只考虑target > start
我希望它具有包容性。

这是否意味着该isAfter方法专门找到一个匹配项?

我在Joda Time中浏览了Javadoc,但是没有找到任何有关它的信息。


阅读 189

收藏
2020-12-03

共1个答案

一尘不染

是的,isAfter是排他性的,否则它应该已经被命名isEqualOrAfter或类似的名称。

解决方案:使用“不之前”代替“之后”,并使用“不之后”代替“之前”。

boolean isBetweenInclusive(LocalDate start, LocalDate end, LocalDate target) {
    return !target.isBefore(start) && !target.isAfter(end);
}
2020-12-03