25

我正在使用 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,但没有找到任何关于它的信息。

4

2 回答 2

63

是的,isAfter是排他的,否则它可能应该被命名isEqualOrAfter或类似的东西。

解决方法:用“not before”代替“after”,用“not after”代替“before”。

boolean isBetweenInclusive(LocalDate start, LocalDate end, LocalDate target) {
    return !target.isBefore(start) && !target.isAfter(end);
}
于 2012-11-27T12:12:26.277 回答
2
于 2018-08-06T21:42:24.770 回答