java - Jodatime beforeOrEqual 和 afterOrEqual

标签 java jodatime

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

重要提示:如果您的时刻(尤其是 DateTime)使用不同的时区,则使用 equals() 方法可能会有害。建议的解决方法更安全。

Joda-Time 没有实现诸如 beforeOrEqual() 等方法,但解决方法非常简单,以至于 Joda-Time-Team 尚未考虑此增强功能。 所以你终于可以做到:

if (
  !startReservation.isAfter(beginInterval) 
  && ((endReservation.isAfter(beginInterval) 
  && (!endReservation.isAfter(finishInterval)
) {
  startReservation= beginInterval;
  //do stuff
}

旁注:从数学上讲,这就像艾伦区间关系“starts”、“finishedBy”、“overlaps”和“equals”(等价)的组合。

关于java - Jodatime beforeOrEqual 和 afterOrEqual,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36033833/

相关文章:

java - 访问自定义字段 Salesforce

java - 未指定源 Weka 在 Windows 上使用 Eclipse

java - 使用 java API 从案例生成器解决方案调用规则

Spring @InitBinder for joda 时间

客户端与服务器断开连接时 Java 套接字写入错误

java - 使用 Spring WebFlow 在 Hibernate 中进行 C3P0 池化仍然没有成功

java - DST 与 Joda Time 的转换

java - 如何将日期时间存储在本地时间中,以便可以通过 hibernate 明确检索?

java - 如何使用 Joda 时间找到最近的月末日期?

java - 使用 JodaTime 的 TimeString 的 FormatterPattern