datetime对你所说的星期一一无所知。从那个时代以来已经有1000年了。在
我建议你调查一下dateutil package。它应用了“人性化”的语义:>>> import dateutil.parser
>>> dateutil.parser.parse('Monday')
datetime.datetime(2014, 2, 3, 0, 0)
>>> dateutil.parser.parse('Monday 18:30:00')
datetime.datetime(2014, 2, 3, 18, 30)
注意它如何假设星期一意味着今天(今天是星期一)。星期二和星期日(以下)是指即将到来的星期二,星期日:
^{pr2}$
为了更进一步,我们看一下dateutil中的rrule模块/类。以及内置的日历模块。例如,使用rrule,我可以:next_five = rrule.rrule(
rrule.WEEKLY,
count=5,
dtstart=dateutil.parser.parse('Sunday 18:30:00'),
)
这将返回从星期日下午6:30开始的未来5周的迭代器。迭代器将生成[datetime.datetime(2014, 2, 5, 18, 30),
datetime.datetime(2014, 2, 12, 18, 30),
datetime.datetime(2014, 2, 19, 18, 30),
datetime.datetime(2014, 2, 26, 18, 30),
datetime.datetime(2014, 3, 5, 18, 30)]
这会让你找到最终的解决方案。在