使用 Croniter 解析 Quartz cron 表达式
Parse Quartz cron expression with Croniter
此代码:
starting_point = datetime.datetime.now() - datetime.timedelta(hours=1)
cron = croniter.croniter('44 5 19 ? * WED,THU,FRI *', starting_point)
cron.get_next(datetime.datetime)
结果:
croniter.croniter.CroniterBadCronError: Exactly 5 or 6 columns has to be specified for iterator expression.
但是当使用 https://www.freeformatter.com/cron-expression-generator-quartz.html 时,相同的表达式会导致
At 19:05:44pm, on every Wednesday, Thursday and Friday, every month
如何用 croniter 解析这个 cron 表达式?
您所指的网站使用支持字段
的Quartz Scheduler
Seconds, Minutes, Hours, Day Of Month, Month, Day Of Week, Year
但是对于 croniter,Seconds
字段是可选的,显然应该在最后一个位置(我没有发现这有特别好的记录,并通过实验得出结论):
Minutes, Hours, Day Of Month, Day Of Week, Seconds
而且似乎不支持?
通配符。
所以一个等效的表达式似乎是
5 19 * * WED,THU,FRI 44
演示:
>>> import croniter
>>> import datetime
>>> c = croniter.croniter('5 19 * * WED,THU,FRI 44')
>>> print(datetime.datetime.utcfromtimestamp(next(c)))
2021-04-23 19:05:44
>>> print(datetime.datetime.utcfromtimestamp(next(c)))
2021-04-28 19:05:44
>>> print(datetime.datetime.utcfromtimestamp(next(c)))
2021-04-29 19:05:44
此代码:
starting_point = datetime.datetime.now() - datetime.timedelta(hours=1)
cron = croniter.croniter('44 5 19 ? * WED,THU,FRI *', starting_point)
cron.get_next(datetime.datetime)
结果:
croniter.croniter.CroniterBadCronError: Exactly 5 or 6 columns has to be specified for iterator expression.
但是当使用 https://www.freeformatter.com/cron-expression-generator-quartz.html 时,相同的表达式会导致
At 19:05:44pm, on every Wednesday, Thursday and Friday, every month
如何用 croniter 解析这个 cron 表达式?
您所指的网站使用支持字段
的Quartz SchedulerSeconds, Minutes, Hours, Day Of Month, Month, Day Of Week, Year
但是对于 croniter,Seconds
字段是可选的,显然应该在最后一个位置(我没有发现这有特别好的记录,并通过实验得出结论):
Minutes, Hours, Day Of Month, Day Of Week, Seconds
而且似乎不支持?
通配符。
所以一个等效的表达式似乎是
5 19 * * WED,THU,FRI 44
演示:
>>> import croniter
>>> import datetime
>>> c = croniter.croniter('5 19 * * WED,THU,FRI 44')
>>> print(datetime.datetime.utcfromtimestamp(next(c)))
2021-04-23 19:05:44
>>> print(datetime.datetime.utcfromtimestamp(next(c)))
2021-04-28 19:05:44
>>> print(datetime.datetime.utcfromtimestamp(next(c)))
2021-04-29 19:05:44