【发布时间】:2018-10-03 15:12:10
【问题描述】:
假设我想知道什么时候用 rrule 庆祝生日。然后频率 YEARLY 工作正常,除了闰日。实际上只有每 4 年一次。
有没有办法直接用rrule处理?
from datetime import datetime
from dateutil.rrule import rrule, YEARLY
n = 1
print(list(rrule(freq=YEARLY, count=n + 1, dtstart=datetime(1990, 4, 28))))
print(list(rrule(freq=YEARLY, count=n + 1, dtstart=datetime(1992, 2, 29))))
给予
[datetime.datetime(1990, 4, 28, 0, 0), datetime.datetime(1991, 4, 28, 0, 0)]
[datetime.datetime(1992, 2, 29, 0, 0), datetime.datetime(1996, 2, 29, 0, 0)]
in the docs 甚至没有提到闰日这一事实让我怀疑这是否只是一个错误。
按年
这可能会有所帮助,但仅限于 2 月 28 日:
from datetime import datetime
from dateutil.rrule import rrule, YEARLY
n = 5
bday = datetime(1990, 4, 28)
print(list(rrule(freq=YEARLY,
byyearday=bday.timetuple().tm_yday,
count=n + 1,
dtstart=bday)))
bday = datetime(1992, 2, 29)
print(list(rrule(freq=YEARLY,
byyearday=bday.timetuple().tm_yday,
count=n + 1,
dtstart=bday)))
给予
[datetime.datetime(1990, 4, 28, 0, 0), datetime.datetime(1991, 4, 28, 0, 0), datetime.datetime(1992, 4, 27, 0, 0), datetime.datetime(1993, 4, 28, 0, 0), datetime.datetime(1994, 4, 28, 0, 0), datetime.datetime(1995, 4, 28, 0, 0)]
[datetime.datetime(1992, 2, 29, 0, 0), datetime.datetime(1993, 3, 1, 0, 0), datetime.datetime(1994, 3, 1, 0, 0), datetime.datetime(1995, 3, 1, 0, 0), datetime.datetime(1996, 2, 29, 0, 0), datetime.datetime(1997, 3, 1, 0, 0)]
【问题讨论】:
-
看起来像这样。你的回答是“是”。
-
它坏了。您可以在github.com/dateutil/dateutil/issues 帮助检查是否已经存在问题,否则请填写新问题。如果您这样做,请将问题编号发回 cmets 中。
-
被质疑的第3方代码行为确实被破解了。没有答案可以帮助项目的公关。
-
我把它作为一个问题发布在这里:github.com/dateutil/dateutil/issues/823
标签: python python-dateutil rrule