drools 7 日期时间段校验
案例如下:电商品台新增一个促销活动,2019年10月份,限时每天10点至13点,下单9折活动。
首先可以用 date-effective 和 date-expires 两个属性限制日期区间为2019-10-01 至 2019-10-31,但是每天10点至11点该怎样限制呢?
1、方法一:利用function
drl文件如下所示:
package rules;//包名 //引入类库 import java.text.SimpleDateFormat import java.util.* //处理时间的function function boolean checkDate(String st ,String et){ Calendar calendar = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); Date startTime = sdf.parse(st); Date endTime = sdf.parse(et); Date nowCal = sdf.parse(sdf.format(calendar.getTime())); if(nowCal.after(startTime) && nowCal.before(endTime)){ return true; }else{ return false; } } //规则 rule "function_rule" //属性限制起止日期 date-effective '2019-10-01' date-expires '2019-10-31' when //对时间点进行校验 eval(checkDate('10:00:00','13:00:00')) then System.out.println("success function_rule"); end
2、方法二:利用Calendar判断
package rules; import java.text.SimpleDateFormat import java.util.* rule "method_2" date-effective "2019-10-01" date-expires "2019-10-31" when $c:Calendar((get(Calendar.HOUR_OF_DAY) >=10 && <17),(get(Calendar.MINUTE) >=0 && <=59),(get(Calendar.SECOND) >=0 && <=59)) //(get(Calendar.HOUR_OF_DAY) >=10 && <17) 等价于 (get(Calendar.HOUR_OF_DAY) >=10,(get(Calendar.HOUR_OF_DAY)<17 then System.out.println("success method_2"); end
引自: https://blog.csdn.net/u010952582/article/details/102698881