Java 如何在drools中进行日期计算?
我刚开始流口水,对drl文件中的日期比较感到困惑。我得到一个条件,比较两个日期类型的事实。drl类似于: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
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个月”的定义不明确。)