Croniter包处理夏时制

2024-05-16 23:50:53 发布

您现在位置:Python中文网/ 问答频道 /正文

下面我注意到,如果我使用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执行,那么为什么不在这里执行,我如何实现它?你知道吗


Tags: fromimportparsergetdatetimedatecronnext