如何解决根据 week_of_month 和 day_of_week 条件构建日期
我不知道如何构造给定 datetime
、year
、month
和 week_of_month
的 day_of_week
对象。有什么线索吗?使用这个我试图实现以下目标:
从 (start_month,start_year)
到 (end_month,end_year)
查找由 week_of_month
和 day_of_week
参数指定的每月日期。这里1 <= week_of_month <= 5
和1 <= day_of_week <= 7
。现在,
- 每个月可能没有 5 周(例如非闰年的二月)
- 第一周和第五周可能没有 7 天。
在这种情况下,基于布尔值 is_to_next_day
,如果 True
则指定下一个日历日,如果 False
则跳过它。
示例输入/输出:
- 输入参数:
start_month=1 start_year=2020,end_month=12,end_year=2020,week_of_month=5,day_of_week=3,is_to_next_day=True
所需的输出:[datetime(2020,1,29),datetime(2020,2,26),3,25),4,5,27),7,1),8,9,30),10,28),11,12,30)]
- 输入参数:
start_month=1 start_year=2020,is_to_next_day=False
所需的输出:[datetime(2020,30)]
解决方法
import calendar
from datetime import datetime
def get_date(year,month,week_of_month,day_of_week,is_to_next_day):
mnth = calendar.monthcalendar(year,month)
if (week_of_month > 1) and (week_of_month < 5):
day = mnth[week_of_month - 1][day_of_week - 1]
return datetime(year,day)
elif week_of_month == 1:
last_day_of_first_week = mnth[0][6]
if day_of_week <= last_day_of_first_week:
return datetime(year,day_of_week)
elif is_to_next_day:
return datetime(year,mnth[1][0])
else:
return None
else:
if (len(mnth) >= week_of_month):
day = mnth[week_of_month - 1][day_of_week - 1]
if(day==0) and is_to_next_day:
return datetime(year + int((month + 1)/12),(month + 1)%12,1)
elif(day==0):
return None
else:
return datetime(year,day)
if (len(mnth) < week_of_month):
if is_to_next_day:
return datetime(year + int((month + 1)/12),1)
else:
return None
# First output
[get_date(yy,mm,5,3,True) for mm in range(1,13) for yy in [2020]]
# Second output
[get_date(yy,False) for mm in range(1,13) for yy in [2020]] # Iterate again to drop None.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。