代码之家  ›  专栏  ›  技术社区  ›  Vladimir Ignatev

如何实现时间表调度的可定制规则?

  •  0
  • Vladimir Ignatev  · 技术社区  · 4 年前

    我正在实现这个库,它只有一个目的:为重复事件制定灵活的日程安排。

    例如,一位用户希望安排“闰年10月每偶数周的周二晚上7点”发送通知。另一位希望它“在每个奇数月的第13天早上6点”或“每周一、周二和周三早上7点”发送。

    我的问题很笼统,或者很抽象,可能与一些谨慎的数学/计算机科学领域有关。我们能否使用简单的整数时间戳算术来表示上述示例中的时间表?哪些操作足以创建一种灵活的语言,其功能强大到几乎可以表达任何重复发生的事件?

    0 回复  |  直到 4 年前
        1
  •  1
  •   IVO GELOV    4 年前

    我认为你需要支持简单布尔表达式的计算——那些使用预定义谓词列表的表达式(例如。 isLeapYear , isMonday , isEvenWeek 等)将它们与逻辑运算符AND、OR、NOT组合在一起(并允许大括号更改优先级)。一旦你有了一段能够计算布尔表达式的代码,剩下的就是定义适量的谓词。

    谓词可能有参数,例如。 isDayOfMonth(x) isHour(14) .

    在数据库中,您很可能会存储表达式的AST(抽象语法树),但也可以将表达式存储为字符串,这完全取决于您的选择。