Droolsは、Temporal Operatorsで使用される時間の単位として、日、時間、分、秒、およびミリ秒のみをサポートしているようです。私は特定の年齢層の人々を探すルールに取り組んでいます。例:6か月から5年の間、18歳未満、12歳以上など。
私のpersonクラスにはdateOfBirthインスタンス変数がありますが、次のような直接比較を行うperson.ageメソッドはありません。
$p : Person(age <= 18)
Personクラスを変更する自由はあまりありません。また、「evals」が最適化されていないため、utilsメソッドを記述したり、比較に「eval」を使用したりすることは避けようとしています。私はよだれをたらしている初心者で、次のルールを書きました。
rule "Under18Years"
when
now : RuleTime()
$p : Person(dateOfBirth after[-6570d, 0s] $now )
then
System.out.println("Under18Years fired");
end
私はちょうど6570(365 * 18)日を使用したので、これはあまり正確ではないことを知っています。うるう年を無視します。18年を説明するために標準のSI年(31,556,926)×18の秒を使用する方が良いかもしれませんが、より良い方法はありますか?これは、数か月を含む条件でも機能しません。誰かがこの問題に対する他のアイデア/解決策を持っていますか?