2016-06-30 96 views
1

我設立一些Drools的規則,如果提供的時間之間,這是依賴於時間的,即說上午8點和下午5點,那麼一個確定的結果需要被返回。另外一個應該在這些時間之外被退回。Drools的:約達日期時間比較

我傳入的對象有一個Joda DateTime,我需要在規則中使用它。

目前,我的方法包括嘗試將此Joda DateTime對象格式化爲24小時數值,然後我可以使用整數比較(即> 800和< 1700)。遺憾的是,自從我搜索了一些例子,但在Drools中發現很少提及時間戳比較的時候,我想不出有什麼其他的方式。

感謝您的任何援助。

回答

1

忘記時間的Drools運營商和時間戳:這些都意味着結合使用的事件 - CEP(複雜事件處理)。不管你的對象描述,你需要測試恰好處導出從時間和日期值,這是繼發於您的問題一個簡單的數值。

我能想到的最好的辦法是寫一個函數的Drools沿

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

線和約束

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

錦繡使用它。謝謝! – GarlicBread

+0

更新:函數語法必須改變一點,但它在正確的軌道上(分成兩個單獨的函數): 函數布爾值isBefore(日期時間dateTime,int checkTime){htm = dateTime.hourOfDay()。 get()* 100 + dateTime.minuteOfHour()。get(); return hhmm <= checkTime; (DateTime dateTime,int checkTime){ } function boolean isAfter(DateTime dateTime,int checkTime){htm} = dateTime.hourOfDay()。get()* 100 + dateTime.minuteOfHour()。get(); return hhmm> = checkTime; } – GarlicBread