1 回答
TA贡献1820条经验 获得超9个赞
您可以将日期保存在字典中,字典键是日历周和日期类型(周末、星期几)的元组。
每一天都保存在allDays字典中,按周数和日期类型的组合作为键进行分组:
('18', 'weekend'): [datetime.date(2020, 5, 2), datetime.date(2020, 5, 3)],
('18', 'working'): [datetime.date(2020, 5, 1)],
('19', 'weekend'): [datetime.date(2020, 5, 9), datetime.date(2020, 5, 10)],
('19', 'working'): [datetime.date(2020, 5, 4), ...
所以你只需要取出每个 dict 项目的第一个和最后一个项目:
import sys
from datetime import date, datetime, timedelta
year, month, st_dt, en_dt = 2020, 5, 1, 31
first_date = datetime(year, month, st_dt).date()
get_first_day = datetime(year, month, st_dt).isoweekday()
def daterange(startDate, endDate, delta=timedelta(days=1)):
currentDate = startDate
while currentDate <= endDate:
yield currentDate
currentDate += delta
allDays = {}
_lastDayType = None
for dte in daterange(date(year, month, st_dt), date(year, month, en_dt), delta=timedelta(days=1)):
if 0 <= dte.weekday() < 5:
_dayType = 'working'
else:
_dayType = 'weekend'
_weeknum = dte.strftime("%V") # number of calendar week
_key = (_weeknum, _dayType)
if _key not in allDays: # create an empty list if unique key doesnt exist
allDays[_key] = []
allDays[_key].append(dte) # add the dates ...
for k,v in allDays.items():
if len(v) == 1:
first, last = v[0], v[0]
else:
first, last = v[0], v[-1]
print("%s >> %s" % (first, last))
输出:
2020-05-01 >> 2020-05-01
2020-05-02 >> 2020-05-03
2020-05-04 >> 2020-05-08
2020-05-09 >> 2020-05-10
2020-05-11 >> 2020-05-15
2020-05-16 >> 2020-05-17
2020-05-18 >> 2020-05-22
2020-05-23 >> 2020-05-24
2020-05-25 >> 2020-05-29
2020-05-30 >> 2020-05-31
添加回答
举报