java - 流口水如何进行日期计算?

标签 java drools

我刚开始流口水,对 drl 文件中的日期比较感到困惑。我有一个条件是比较两个日期类型的事实。 drl 就像:

rule "TimeComparison"
    when
        $person:Person( date1 >= date2 )
    then
        //
end

在内部,date1 是已知日期之后的三天。如何实现drl规则文件中的(特定日期后三天/周/月)?

最佳答案

假设您的日期是 java.util.Date,< 运算符使用 Date.before(date),> 运算符使用 Date.after(date)。

我建议使用Date.compareTo(),例如:

rule "TimeComparison"
    when
        $date
        $person:Person( date1.compareTo(date2) >= 0)
    then
        //
end

如果 date2 不是您想要比较的内容,则将其替换为内联所需的内容,例如“date1 is after 'now'”:

$person : Person(date1.compareTo(new Date()) >= 0)

使用 java.time 类要容易得多,例如使用 LocalDate:

$person : Person(date1.plusDays(3).compareTo(date2))

如果比较日期是系统“已知”的,则可能需要将计算出的日期推断为新事实(这里我只是提出了“PersonEffectiveDate”的概念)并在需要时使用它(根据您的情况更改方法/设计/概念):

rule "Determine person effective date"
    when
        $person : Person($date1 : date1)
    then
        // do the desired calculation
        Date $effectiveDate = $date1.plusDays(3);
        PersonEffectiveDate ped = new PersonEffectiveDate($person, $effectiveDate);
        insert(ped);
end

rule "TimeComparison"
    when
        PersonEffectiveDate($person : person, $effectiveDate : effectiveDate >= date2)
    then
        //
end

或者不同的东西,例如:

$person.date1.compareTo($effectiveDate) >= 0)

关于java - 流口水如何进行日期计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40781259/

相关文章:

java - Drools 决策表对象比较给出了相反的结果

java - 使用 Eclipse 默认 Drools 示例 DroolsTest 找不到 main

java - 步骤之后和步骤之前 cucumber

java - 在java中获取韩语单词的最后一个字符

java - 克隆基类的列表

Drools JBOSS 规则嵌套 IF

java - 为什么 DispatcherServlet 创建另一个应用程序上下文?

java - 删除一台扫描仪,薪资程序第 3 周

java - Drools DRL 中的对象传递问题

java - 如何从 KIE 工作台获取 kieContainer