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 ) )
我正在设置一些与时间相关的 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 ) )