如何在流氓的过去日期列表中获得最大日期?

时间:2018-01-07 19:51:50

标签: drools drools-guvnor drools-planner drools-fusion drools-flow

从订单列表中,我需要收集过去的日期到requesteffDate和requesteffTime,并采用过去日期的最大值。

function boolean dateCheck(Date effdt, Date efftm) {
  String efffdt = new SimpleDateFormat("yyyyMMdd").format(effdt);
  String effftm = new SimpleDateFormat("HHmm").format(efftm);
  Date effdttm = new SimpleDateFormat("yyyyMMddHHmm").parse(efffdt + "" + effftm);
  return effdttm.before(new Date());
} 

rule "finding past maximum date"
when
  $company : Company( $date:requesteffDate, $time:requesteffTime, $reqdt : requesteffDate.getTime(), $reqtm : requesteffTime.getTime() )
eval(dateCheck($date,$time))
accumulate(Orders( effectiveDate != null,
                   effdate:effectiveDate.getTime()<$reqdt),
           maxEffDate:max(effdate))
then
  //error

执行此操作时,

accumulate(Orders(effectiveDate!=null,
                  effdate:effectiveDate.getTime()<$reqdt),
                  maxEffDate:max(effdate))

我的maxEffDate为-9223372036854775808,转换时显示为1940

同样我尝试使用min functionn它显示2262。

我的班级就是这样。

Class Company{
  private Date requesteffDate;
  private Date requesteffTime;
  private Employee emp;
  private List<Orders> orderlist;
}

Class Orders{
  private Date effectiveDate;
  private Date effectiveTime;
}

1 个答案:

答案 0 :(得分:0)

-9223372036854775808是Long.MIN_VALUE。这是确定的,表明累积没有找到任何订单。

确保插入一些匹配的订单事实。

添加一个maxEffDate的守卫!= Long.MIN_VALUE。

停止使用Date作为时间值:使用LocalDate和LocalTime或将日期和时间组合到单个Date值中。

请注意日期和时间的转换不受您的区域设置的影响。