我正在使用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
}


旁注:在数学上,这就像艾伦区间关系的“开始”,“完成”,“重叠”和“等于”(等效)的组合。

10-07 11:58