drools 7 日期时间段校验

本文分享一个drools校验日期区间内时间段的校验方法。

       案例如下:电商品台新增一个促销活动,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

这种方式需要在kieSession中insert一个Calendar实例。相对于方法一写法清秀了很多,一些细节上的内容也更清楚一些。

        以上就是个人的一些拙见,如果您有更好的还希望您能不吝赐教。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值