Drools:Joda DateTime比较

时间:2016-06-30 04:00:12

标签: java jodatime drools

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

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

目前,我的方法包括尝试将这个Joda DateTime对象格式化为24小时数值,然后我可以使用整数比较(即&gt; 800和<1700)。我找不到任何其他方法,因为我搜索了一些例子,但很遗憾在Drools中很少提到时间戳比较。

提前感谢您的任何帮助。

1 个答案:

答案 0 :(得分:0)

忘记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 ) )