2

Drools 似乎只支持与时间运算符一起使用的时间单位的天、小时、分钟、秒和毫秒。我正在制定一个寻找特定年龄段人群的规则。例如:6个月至5岁、18岁以下、12岁以上等。

我的 person 类有一个 dateOfBirth 实例变量,但没有 person.age 方法可以进行直接比较,例如:

    $p : Person(age <= 18)

我没有太多的自由来修改 Person 类,我试图避免编写 utils 方法并使用“eval”进行比较,因为“evals”没有优化。我是一个流口水的新手,并写了以下规则。

rule "Under18Years"

when
    now : RuleTime()
    $p : Person(dateOfBirth after[-6570d, 0s] $now )
then
    System.out.println("Under18Years fired");
end

我知道这不是很准确,因为我只使用了 6570 (365*18) 天;忽略闰年。我最好在标准 SI 年 (31,556,926) 乘以 18 中使用秒来计算 18 年,但有更好的方法吗?这也不适用于涉及数月的条件。有没有人对这个问题有任何其他想法/解决方案?

4

1 回答 1

0

您可以创建执行上述操作的包或函数

public int getAge() {
Years years = Years.yearsBetween(dateOfBirth, currentDate);
return years.getYears();

只要我一直在使用流口水,就一直有很多年可供使用。我看到这是不久前发布的,也许你已经发现了。

于 2013-04-10T12:28:36.217 回答