我正在使用 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,但没有找到任何相关信息。
最佳答案
是的,isAfter
是独占的,否则它可能应该被命名为 isEqualOrAfter
或类似的名称。
解决方法:用“not before”代替“after”,用“not after”代替“before”。
boolean isBetweenInclusive(LocalDate start, LocalDate end, LocalDate target) {
return !target.isBefore(start) && !target.isAfter(end);
}
关于java - 包含日期范围检查在 Joda 时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13583944/