2016-06-30 10 views
1

時間に依存するいくつかのDroolsルールを設定しています。つまり、指定された時間が午前8時から午後5時までの場合、特定の結果を返す必要があります。これらの時間外に別のものを返すべきです。Drools:Joda DateTimeの比較

私が渡しているオブジェクトには、ルールで使用する必要があるJoda DateTimeがあります。

現時点では、このJoda DateTimeオブジェクトを24時間の数値に整形して整数比較を使用できます(つまり、> 800と< 1700)。私は例を捜したが、残念なことにDroolsでタイムスタンプ比較の言葉がほとんど見つからなかったので、私はそれを行う他の方法は考えられませんでした。

ありがとうございました。

答えて

1

Droolsの一時的な演算子とタイムスタンプを忘れてしまいます。これらはイベント - CEP(複合イベント処理)と組み合わせて使用​​するためのものです。あなたのオブジェクトが何であるかを問わず、ちょうどという単純な数値をテストする必要があります。これは、問題の2次的な時間と日付の値からを派生させたものです。私は考えることができる

ベストな方法は、

function boolean isBetween(DateTime dt, int start, int end){ 
    int hhmm = dt.hourOfDay()*100 + dt.minuteOfDay(); 
    return start <= hhmm && hhmm < end; 
} 

の線に沿ってDroolsの関数を記述し、

GarlicBreadObject($dt: itsDateTime, isBetween($dt, 800, 1700)) 
+0

スプレンディッド制約でそれを使用することです。ありがとうございました! – GarlicBread

+0

更新:関数の構文を少し変更する必要がありましたが、適切なトラック(2つの別々の関数に分割されています)にありました: function boolean isBefore(DateTime dateTime、int checkTime){ int hhmm = dateTime.hourOfDay get()* 100 + dateTime.minuteOfHour()。get(); return hhmm <= checkTime; } function boolean isAfter(DateTime dateTime、int checkTime){ int hhmm = dateTime.hourOfDay()。get()* 100 + dateTime.minuteOfHour()。get(); return hhmm> = checkTime; } – GarlicBread