在Joda Time中查看包含日期范围

Abu*_*kar 23 java datetime date jodatime

我正在使用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));
}
Run Code Online (Sandbox Code Playgroud)

上述方法的输出是:

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
Run Code Online (Sandbox Code Playgroud)

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

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

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

我已经通过Jav Time的javadoc,但没有找到任何关于它的东西.

Jes*_*per 52

是的,isAfter是独家的,否则它应该被命名isEqualOrAfter或类似的东西.

解决方案:使用"not before"而不是"after","not after"而不是"before".

boolean isBetweenInclusive(LocalDate start, LocalDate end, LocalDate target) {
    return !target.isBefore(start) && !target.isAfter(end);
}
Run Code Online (Sandbox Code Playgroud)