我正在使用jodatime(java 6)在一个间隔中检查日期,我确实需要更有效地做到这一点。有什么办法可以避免这种混乱:(所有变量的类型均为org.joda.time.LocalDate
)
if ((startReservation.isBefore(beginInterval) || startReservation.equals(beginInterval))
&& ((endReservation.isAfter(beginInterval) && (endReservation.isBefore(finishInterval) || endReservation.equals(finishInterval))))) {
startReservation= beginInterval;
//do stuff
}
还有一堆其他
else if
。jodatime是否实现
beforeOrEqual()
/ afterOrEqual()
方法或类似方法? 最佳答案
假设您的变量是ReadableInstant
类型的对象,则表达式startReservation.isBefore(beginInterval) || startReservation.equals(beginInterval)
等效于更简单,更简短的表达式:!startReservation.isAfter(beginInterval)
重要提示:如果您的时刻(尤其是equals()
)使用不同的时区,则使用DateTime
方法可能有害。建议的解决方法更安全。
Joda-Time没有实现beforeOrEqual()
等方法,但是解决方法非常简单,以至于Joda-Time-Team没有考虑此增强功能。因此,您最终可以执行以下操作:
if (
!startReservation.isAfter(beginInterval)
&& ((endReservation.isAfter(beginInterval)
&& (!endReservation.isAfter(finishInterval)
) {
startReservation= beginInterval;
//do stuff
}
旁注:在数学上,这就像艾伦区间关系的“开始”,“完成”,“重叠”和“等于”(等效)的组合。