Предполагая, что ваша дата - java.util.Date, оператор Date.before (date) использует оператор Date.before (date), а оператор> Date.after (date).
я предлагаю использовать Date.compareTo(), например:
rule "TimeComparison"
when
$date
$person:Person(date1.compareTo(date2) >= 0)
then
//
end
Если date2 не то, что вы хотите, для сравнения, то подставляется нужный для него рядный, например, это для «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)
Вы можете попробовать временные операторы. Но я думаю, что ваша проблема может быть проще обрабатывать с помощью функции isLaterThanDays (Date d1, Date d2, int days) и использовать ее в ваших ограничениях. (Примечание: «n месяцев» не определен.) – laune