Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何获得一个月内至少4天的最后一个星期六-星期五时段?_Python_Date_Timedelta_Python Dateutil - Fatal编程技术网

Python 如何获得一个月内至少4天的最后一个星期六-星期五时段?

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天日期范围的开始/结束日期,其中以下为真(给定月份和年份):

  • 星期六开始
  • 将于下周五结束
  • 在给定月份的7天中至少有4天(意味着下个月最多可以有3天)
  • 是满足这些条件的最后日期范围
例如,如果我得到2020年8月的这段时间,结果将是8/22到8/28。
如果我在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,我甚至没有想到这一点。