Python 如何获得一个月内至少4天的最后一个星期六-星期五时段?
我试图获得7天日期范围的开始/结束日期,其中以下为真(给定月份和年份):Python 如何获得一个月内至少4天的最后一个星期六-星期五时段?,python,date,timedelta,python-dateutil,Python,Date,Timedelta,Python Dateutil,我试图获得7天日期范围的开始/结束日期,其中以下为真(给定月份和年份): 星期六开始 将于下周五结束 在给定月份的7天中至少有4天(意味着下个月最多可以有3天) 是满足这些条件的最后日期范围 例如,如果我得到2020年8月的这段时间,结果将是8/22到8/28。 如果我在2020年6月也这样做,结果将是6/27到7/3 有人有什么想法吗?提前谢谢 请测试以下代码。如果你告诉我结果,我会很高兴的 import datetime, calendar import dateparser def
- 星期六开始
- 将于下周五结束
- 在给定月份的7天中至少有4天(意味着下个月最多可以有3天)
- 是满足这些条件的最后日期范围
如果我在2020年6月也这样做,结果将是6/27到7/3
有人有什么想法吗?提前谢谢 请测试以下代码。如果你告诉我结果,我会很高兴的
import datetime, calendar
import dateparser
def get_date_range(input_dt):
r = dateparser.parse(input_dt)
year = r.year
month = r.month
day = r.day
last_date = calendar.monthrange(year, month)[1]
full_end_date = dateparser.parse(f"{last_date}/{month}/{year}")
lastFriday = full_end_date
oneday = datetime.timedelta(days=1)
while lastFriday.weekday() != calendar.SATURDAY:
lastFriday -= oneday
days_in_given_month = (full_end_date - lastFriday).days + 1
if days_in_given_month < 4:
start_date = lastFriday - datetime.timedelta(days=7)
end_date = start_date + datetime.timedelta(days=6)
start_date_str = start_date.strftime('%m/%d/%Y')
end_date_str = end_date.strftime('%m/%d/%Y')
else:
end_date = lastFriday + datetime.timedelta(days=6)
start_date_str = lastFriday.strftime('%m/%d/%Y')
end_date_str = end_date.strftime('%m/%d/%Y')
return [start_date_str, end_date_str]
input_dt = "June 2020"
# input_dt = "August 2020"
r = get_date_range(input_dt)
print(r)
导入日期时间、日历
导入日期分析器
def获取日期范围(输入日期):
r=dateparser.parse(输入_dt)
年=年
月=r.月
日=日
最后日期=日历。蒙特兰奇(年,月)[1]
full_end_date=dateparser.parse(f“{last_date}/{month}/{year}”)
lastFriday=完整结束日期
oneday=datetime.timedelta(天=1)
上周五。工作日()!=日历.星期六:
上周五-=一天
给定月份的天数=(完整结束日期-上周五)。天数+1
如果给定月份的天数小于4:
开始日期=lastFriday-datetime.timedelta(天=7)
结束日期=开始日期+日期时间.timedelta(天数=6)
开始日期=开始日期.strftime(“%m/%d/%Y”)
end_date_str=end_date.strftime(“%m/%d/%Y”)
其他:
end_date=lastFriday+datetime.timedelta(天数=6)
开始日期=lastFriday.strftime(“%m/%d/%Y”)
end_date_str=end_date.strftime(“%m/%d/%Y”)
返回[开始日期,结束日期]
输入\udt=“2020年6月”
#输入\udt=“2020年8月”
r=获取日期范围(输入日期)
印刷品(r)
看看模块dateutil
。您的条件归结为“包含本月最后一个星期二的一周”,下面是如何获得本月最后一个星期二的答案:非常感谢@Blckknght,我甚至没有想到这一点。