Java 如何在drools中进行日期计算?

Java 如何在drools中进行日期计算?,java,drools,Java,Drools,我刚开始流口水,对drl文件中的日期比较感到困惑。我得到一个条件,比较两个日期类型的事实。drl类似于: rule "TimeComparison" when $person:Person( date1 >= date2 ) then // end 在内部,date1是已知日期后的三天。如何在drl规则文件中实现(特定日期后的三天/周/月)?假设您的日期为java.util.date,运算符使用date.after(日期) 我建议使用Dat

我刚开始流口水,对drl文件中的日期比较感到困惑。我得到一个条件,比较两个日期类型的事实。drl类似于:

rule "TimeComparison"
    when
        $person:Person( date1 >= date2 )
    then
        //
end

在内部,date1是已知日期后的三天。如何在drl规则文件中实现(特定日期后的三天/周/月)?

假设您的日期为java.util.date,<运算符使用date.before(日期),而>运算符使用date.after(日期)

我建议使用Date.compareTo(),例如:

rule "TimeComparison"
    when
        $date
        $person:Person( date1.compareTo(date2) >= 0)
    then
        //
end
$person.date1.compareTo($effectiveDate) >= 0)
如果date2不是您想要进行比较的,则将所需的替换为内联,例如“date1在'now'之后”:

使用java.time类要容易得多,例如使用LocalDate:

$person : Person(date1.plusDays(3).compareTo(date2))
如果比较日期是一个系统“已知”,则可能需要将计算日期推断为一个新事实(这里我只是简单地提出了“PersonEffectiveDate”的概念),并在需要时使用它(根据您的情况更改方法/设计/概念):

或者其他不同的东西,比如:

rule "TimeComparison"
    when
        $date
        $person:Person( date1.compareTo(date2) >= 0)
    then
        //
end
$person.date1.compareTo($effectiveDate) >= 0)

你可以试试时态操作符。但我认为,使用isLaterThanDays函数(日期d1、日期d2、整数天)处理您的问题可能更容易,并在约束中使用它。(注意:“n个月”的定义不明确。)