【问题标题】:Schedule notation (time ranges)时间表符号(时间范围)
【发布时间】:2011-02-27 21:24:30
【问题描述】:

我有一些代码需要根据时间表执行操作:例如在工作时间做 X,下班后做 Y。时间表将由我们的客户定义,所以我需要一个可以由人们编写并由我的程序解析的符号。我正在考虑类似的事情:

12/25:0730-1730 Do Y
[Mo-Fr]:0730-1730 Do X
[Mo-Tu]:1730-0730 Do Y
Fr:1730-Mo:0730 Do Y

每周肯定会有变化。年度变化(假期)似乎很可能。我想要一个高效且灵活的符号。

我还需要 java 代码来解析时间范围并告诉我给定日期时间在哪个范围内。

我在网上搜索过,一无所获。最接近的是 CRON 表示法,这不是我所需要的。

有人知道现有的符号定义和实现吗?

谢谢,

【问题讨论】:

  • 您是要在特定时间运行某些东西还是“允许”在间隔之间发生某些事情?
  • 嗯,如果你对 CRON 表示法非常了解,它就很有表现力。此外,考虑使用 Quartz 而不是构建自己的调度程序。它支持类似 Cron 的语法 quartz-scheduler.org/docs/api/2.0.0/org/quartz/…,以及其他调度方法。

标签: java datetime notation


【解决方案1】:

对于 Java Joda time(Scala 包装器 scala-time)是一个强大的时间计算库。您可以查看google-rfc-2445,它的功能类似于您所要求的(?)。

如果您正在寻找 Java 调度程序,http://www.quartz-scheduler.org/ 是一个不错的选择。

【讨论】:

  • 感谢您的参考。看起来 joda-time 比我需要的要少,但可能是一个很好的起点。谷歌代码比我需要的要多,但也许我可以去掉真正有用的对象。只有一个客户需要这个。我可能会放弃优雅的符号,转而使用对人们来说很难但易于编程的东西。
【解决方案2】:

我认为你不会找到开箱即用的东西。在这种情况下,最好自己实现并完全控制代码。您可以使用antlr 创建解析器。

在您的语法中添加优先级概念。然后安排一些事情会更容易

01.01.2011-31.01.2011 prio 1 do-idle-stuff
[Mo-Fr]               prio 2 do-work
[Sa-Su]               prio 2 weekend
10.02.2011-17.02.2011 prio 3 go-on-holidays

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-05
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多