计算Drools中两个日期之间的天/月/年

时间:2017-10-30 13:08:32

标签: date drools

我试图使用引导规则编辑器比较来自2个不同实体的2个日期(让我们说日期1和日期2)(让我们说实体1和实体2)。

Date1是Entity1和的变量 Date2是Entity2的变量

我想要执行的规则是 -

Package com.rules.xyz;
import com.rules.xyz.Entity1;
import com.rules.xyz.Entity2;

When
{
Entity1.Date1 <= Entity2. Date2 + 7 Days
}

then <perform some action>

我想在数月和数年内应用相同的规则,即 当Date1&lt; = Date2 + 6 Months时,然后执行一些操作。

我正在使用Drools Workbench 7.2.0 Final

请你为此提出一个解决方案。

1 个答案:

答案 0 :(得分:0)

在我的情况下,我创建了一个能够重用它的函数,因此它在一个单独的DRL文件中定义:

function Date workWithDates(Date date, String operator, int entity, int number) {
    if (date != null) {
        java.util.Calendar newCal = java.util.Calendar.getInstance();
        newCal.setTime(date);
        if (operator.equals("-")) { //normally we would add, except if we want to subtract
            number = -number;
        }
        if (entity == 1) { //years
            newCal.add(java.util.Calendar.YEAR, number);
        } else if (entity== 2) { //months
            newCal.add(java.util.Calendar.MONTH, number);       
        } else if (entity== 3) { //days
            newCal.add(java.util.Calendar.DATE, number);        
        } else if (entity== 4) { //hours
            newCal.add(java.util.Calendar.HOUR, number);        
        } else if (entity== 5) { //minutes
            newCal.add(java.util.Calendar.MINUTE, number);      
        } else if (entity== 6) { //seconds
            newCal.add(java.util.Calendar.SECOND, number);      
        }
        return newCal.getTime();    
    } else {
        return date;
    }
}

在您调用此函数的DRL文件中,您可以像这样使用它:

when
    Entity2 ( $date2 : Date2 != null )
    Entity1 ( Date1 != null, Date1 <= (workWithDates($date2, "+", 3, 7)) )

如果您也选择将功能分开到其他文件中,请确保它位于同一个包中。例如,我在000 FUNCTION.drl

中定义了所有可重用的函数
相关问题