在下面,我注意到,如果我们使用croniter
来获取夏令时的前一个日期和下一个日期之后的下一个日期,则会发生一些奇怪的事情。下面是我的完整代码,您可以复制/粘贴并运行它。
import pytz
from dateutil import parser
from croniter import croniter
from datetime import datetime
edt = pytz.timezone('America/New_York')
utc = pytz.utc
fmt = '%Y-%m-%d %H:%M:%S %Z%z'
date_utc = parser.parse('2019-03-12 01:05:00+00:00')
date_edt = date_utc.astimezone(edt)
# Get previous cron schedule date time.
prev_cron = croniter('5 21 * * 1-5', date_edt).get_prev(datetime)
# Get next cron schedule date time.
next_cron = croniter('5 21 * * 1-5', prev_cron).get_next(datetime)
print('date_utc\t', date_utc, date_utc.strftime('%Z'))
print('date_edt\t', date_edt, date_edt.strftime('%Z'))
print('prev cron\t', prev_cron, prev_cron.strftime('%Z'))
print('next cron\t', next_cron, next_cron.strftime('%Z'))
打印结果:
date_utc 2019-03-12 01:05:00+00:00 UTC
date_edt 2019-03-11 21:05:00-04:00 EDT
prev cron 2019-03-08 20:05:00-05:00 EST
next cron 2019-03-08 21:05:00-05:00 EST
我的问题是:prev_cron
为什么显示20:05
而不是21:05
。如果我有cron作业,它将在当地时间21:05执行,那么为什么不在这里不这样做,我又如何实现呢?