【问题标题】:Drools: Joda DateTime comparisonDrools:Joda DateTime 比较
【发布时间】:2016-11-01 23:56:03
【问题描述】:

我正在设置一些依赖于时间的 Drools 规则,即如果提供的时间介于上午 8 点和下午 5 点之间,则需要返回某个结果。应该在这些时间之外返回一个不同的。

我传入的对象有一个 Joda DateTime,我需要在规则中使用它。

目前,我的方法包括尝试将此 Joda DateTime 对象格式化为 24 小时数值,然后我可以使用整数比较(即 > 800 和

提前感谢您的帮助。

【问题讨论】:

    标签: java jodatime 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 ) )
    

    【讨论】:

    • 太棒了。谢谢!
    • 更新:函数语法必须稍微改变,但它在正确的轨道上(分成两个单独的函数): function boolean isBefore(DateTime dateTime, int checkTime) { int hhmm = dateTime. hourOfDay().get() * 100 + dateTime.minuteOfHour().get();返回 hhmm = checkTime; }
    猜你喜欢
    • 2011-01-11
    • 1970-01-01
    • 2014-08-20
    • 2011-09-30
    • 1970-01-01
    • 2020-10-07
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多