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
添加回答
舉報