Drools:Joda DateTime 比较

Drools: Joda DateTime comparison

我正在设置一些与时间相关的 Drools 规则,即如果提供的时间介于上午 8 点和下午 5 点之间,则需要返回特定结果。在这些时间之外应该返回一个不同的。

我传递的对象有一个我需要在规则中使用的 Joda DateTime。

目前,我的方法包括尝试将此 Joda DateTime 对象格式化为 24 小时制数值,然后我可以对其使用整数比较(即 > 800 和 < 1700)。我想不出任何其他方法,因为我已经搜索了示例,但不幸的是,在 Drools 中很少提到时间戳比较。

在此先感谢您的帮助。

忘记 Drools 时间运算符和时间戳:这些是为了与事件结合使用 - CEP(复杂事件处理)。无论您的对象描述什么,您都需要测试一个简单的数值,该数值恰好 从时间和日期值派生,这对您的问题来说是次要的。

我能想到的最好的方法是按照

的方式编写一个 Drools 函数
function boolean isBetween( DateTime dt, int start, int end ){
    int hhmm = dt.hourOfDay()*100 + dt.minuteOfDay();
    return start <= hhmm && hhmm < end;
}

并在约束中使用它

GarlicBreadObject( $dt: itsDateTime, isBetween( $dt, 800, 1700 ) )