这是我想出的一个解决方案,也许你会发现它不那么复杂。
它似乎也快了大约 4 倍,如果您处理大量日期,这可能会有所作为。
from datetime import *
from dateutil.relativedelta import *
def weekDayOfTheMonth(xdate):
daylist = [MO,TU,WE,TH,FR,SA,SU]
weekday = xdate.weekday()
firstDayOfTheMonth = datetime(xdate.year, xdate.month, 1)
interval = (weekday + 7 - firstDayOfTheMonth.weekday() ) % 7
firstOfThisWeekDay = datetime(xdate.year, xdate.month, 1 + interval)
n = ((xdate.day - firstOfThisWeekDay.day) / 7) + 1
return daylist[weekday](n)
print(weekDayOfTheMonth(datetime.today()))
print(weekDayOfTheMonth(datetime(2018,11,24)))
基本上发生的事情是:
我发现一周中的哪一天是给定月份的第一天。
基于这些信息,我可以轻松计算给定月份任何给定工作日的第一天。
然后我可以更轻松地计算出例如 2018 年 12 月 18 日是本月的第三个星期二。