2

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の秒を使用する方が良いかもしれませんが、より良い方法はありますか?これは、数か月を含む条件でも機能しません。誰かがこの問題に対する他のアイデア/解決策を持っていますか?

4

1 に答える 1

0

上記を実行するパッケージまたは関数を作成できます

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

私がよだれを使っている限り、いつでも頼むことができる年がありました。私はこれが少し前に投稿されたのを見ます、そして多分あなたはそれ以来知っています。

于 2013-04-10T12:28:36.217 に答える