我刚刚流口水并且在drl文件中对日期比较感到困惑。我有一个条件来比较两个日期类型的事实。 drl就像:
rule "TimeComparison"
when
$person:Person( date1 >= date2 )
then
//
end
在里面,date1是已知日期后的三天。如何在drl规则文件中实现(特定日期后三天/几周/月)?
答案 0 :(得分:0)
假设您的日期是java.util.Date,则<运算符使用Date.before(date)和>运算符使用Date.after(date)。
我建议使用Date.compareTo(),例如:
rule "TimeComparison"
when
$date
$person:Person( date1.compareTo(date2) >= 0)
then
//
end
如果date2不是你想要比较的东西,那么用内联替换所需的内容,例如#34; date1在'''"之后:
$person : Person(date1.compareTo(new Date()) >= 0)
使用java.time类更容易,例如使用LocalDate:
$person : Person(date1.plusDays(3).compareTo(date2))
如果比较日期是系统"已知",可能需要将计算的日期推断为新事实(这里我简单地构成了" PersonEffectiveDate"并在需要的地方使用它(根据您的情况需要改变方法/设计/概念):
rule "Determine person effective date"
when
$person : Person($date1 : date1)
then
// do the desired calculation
Date $effectiveDate = $date1.plusDays(3);
PersonEffectiveDate ped = new PersonEffectiveDate($person, $effectiveDate);
insert(ped);
end
rule "TimeComparison"
when
PersonEffectiveDate($person : person, $effectiveDate : effectiveDate >= date2)
then
//
end
或其他不同的东西,例如:
$person.date1.compareTo($effectiveDate) >= 0)