本周早些时候我遇到了这个日期和时间限制问题,并没有真正找到任何好算法。如果这是一个闰年,那么每个想法都会停止,例如会是什么?或如果这是在我们改为/从DST转换的那天晚上运行 < / p>
输入:crontab
表达式(CRON format上的维基百科,Cron)。例如:
0 */5 2,14 * * *
含义小时为2或14时每五分钟
30 5 */2 1 * * */2
意思每个月的第一个晚上5点30分,每年甚至一年。
输出:此表达式的最后一次为真。 如果在2009年11月11日上午11点运行,则输出应为:
2009-11-01 02:55:00
第一个例子的和
2008-11-01 10:05:30
第二个。
一些注意事项:
cron表达式格式似乎有几种变体:有些包括秒,有些包括年份。一般问题应该大致相同。
随意应用明智的约束;例如,完全可以在1970年之前处理。
我目前的直觉是,当我们遇到无效的日期和时间时,从年份到第二次的深度优先搜索,回溯。
蛮力方法可能是一次倒退一天,并评估cron表达的日期部分(自1970年以来仅有大约15k天)。找到有效日期后,对时间部分执行相同操作。
答案不必包含代码,我主要是按照上面的算法大纲。
答案 0 :(得分:0)
我不知道你是想得到这份工作,还是想为了教育而自己编写算法。在第一种情况下,可能每种语言都有自己的cron作业实现,只需获取计算时间并使用它的cron部分。这是java中的一个示例:http://blog.piotrturski.net/2013/06/testing-cron-expression.html
如果您想自己编写,那么您不应该在cron上(这是次要问题),而是在TimeZone实现上。闰年是您必须解决的最简单的问题。每个时区都保存所有与时间相关的更改的历史记录:行政时间更改(夏令时),管理日期更改(引入格里高利历),甚至可能是闰秒,以及影响时区所代表区域时间的每个事件