获取整个月的周一至周五的周范围

时间:2020-05-13 22:51:21

标签: python python-3.x datetime timedelta rrule

我有一个脚本,该脚本每周运行一次,并将Excel文件输出到命名约定为May11-May15(在M-F星期中,strptime的格式为%b%d的文件夹)

import datetime
from dateutil import rrule

# Get calendar month date (i.e. Apr1-Apr30)
def getCalendarMonthRange(input):
    calendar_month_start = input.replace(day=1)
    calendar_month_end = input.replace(month=input.month+1, day=1) - datetime.timedelta(days=1)
    return [calendar_month_start, calendar_month_end]

# Return M-F Week Range (i.e. given May13, return May11-May15)
def getWeekRange(poll_date):
    monday = poll_date + datetime.timedelta(days=-poll_date.weekday())
    friday = monday + datetime.timedelta(days=4)
    week_range = [monday, friday]
    return week_range

TESTING_DATE = datetime.datetime(2020,4,24) # Our pivot date, arbitrary date in month we want to look at
start, end = getCalendarMonthRange(TESTING_DATE)
for dt in rrule.rrule(rrule.WEEKLY, dtstart=start, until=end):
    print(getWeekRange(dt)

例如,以四月为例,以上代码段将输出:

Mar30-Apr3
Apr6-Apr10
Apr13-Apr17
Apr20-Apr24
Apr27-May1

这是完美的,因为这些文件夹完美地包含了Apr1-Apr30。

如果我们查看3月,它将输出:

Feb24-Feb28
Mar2-Mar6
Mar9-Mar13
Mar16-Mar20
Mar23-Mar27

存在两个问题:

  1. Feb24-Feb28不应该在那儿,因为这两个日期都不是三月(这是getWeekRange()的一个问题,因为星期一= 0,星期日= 6,所以我在days=-poll_date.weekday()中这样做)
  2. 该脚本在3月27日结束,但错过了包含3月30日31日的一周。

我希望该月的输出完全包含在内,这意味着如果星期一至星期五在一周的中午之前和之后的几周都可以,那么我可以。

0 个答案:

没有答案
相关问题