代码之家  ›  专栏  ›  技术社区  ›  Anders Lindahl

计算cron表达式上次应该触发的时间的算法?

  •  0
  • Anders Lindahl  · 技术社区  · 16 年前

    本周早些时候,我遇到了这个日期和时间限制问题,并没有找到任何好的算法方法。我的每一个想法都会因为这样的事情而停止 如果这是闰年呢? 如果在晚上切换到DST或从DST切换到DST怎么办


    A. crontab 表达式(维基百科上) CRON format , Cron ). 例如:

    0 */5 2,14 * * *
    

    当时间是2或14时,每五分钟一次

    30 5 */2 1 * * */2
    

    意思


    输出: 如果在2009年11月1日上午11:00运行,输出应为:

    2009-11-01 02:55:00 
    

    对于第一个示例和

    2008-11-01 10:05:30
    

    第二次。


    一些注意事项:

    自由地应用合理的约束;例如,在1970年之前不处理这些年是完全可以的。

    蛮力方法可以是一次倒数一天,并计算cron表达式的日期部分(自1970年以来只有大约15k天)。找到有效日期后,对时间部分执行相同操作。

    1 回复  |  直到 16 年前
        1
  •  0
  •   piotrek    12 年前

    http://blog.piotrturski.net/2013/06/testing-cron-expression.html

    如果您想自己编写,那么不应该使用cron(这是一个小问题),而应该使用时区实现。闰年是你必须解决的最简单的问题。每个时区保存所有与时间相关的更改的历史记录:管理小时更改(夏令时)、管理日期更改(引入公历)、甚至闰秒,以及影响时区所代表的区域时间的每个事件