我正在设置一些与时间有关的Drools规则,即如果提供的时间介于上午8点到下午5点之间,则需要返回某个结果。在这些时间之外应该返回另一个。
我传入的对象有一个Joda DateTime,我需要在规则中使用。
目前,我的方法包括尝试将这个Joda DateTime对象格式化为24小时数值,然后我可以使用整数比较(即&gt; 800和<1700)。我找不到任何其他方法,因为我搜索了一些例子,但很遗憾在Drools中很少提到时间戳比较。
提前感谢您的任何帮助。
答案 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 ) )