时间区间转换为天
def dateRange(beginDate, endDate):
dates = []
dt = datetime.datetime.strptime(beginDate, "%Y-%m-%d")
date = beginDate[:]
while date <= endDate:
dates.append(date)
dt = dt + datetime.timedelta(1)
date = dt.strftime("%Y-%m-%d")
return dates
时间区间转换为周
def get_week_monday_and_sunday_by_date(date_str):
"""
给定一个日期-返回日期所在周的周一0点时间 和 周日23点59分59秒
:param date_str: 如:"2020-05-01"
:return: 给定一个日期-返回日期所在周的周一0点时间 和 周日23点59分59秒
"""
now_time = datetime.datetime.strptime(date_str + " 00:00:00", "%Y-%m-%d %H:%M:%S")
week_start_time = now_time - datetime.timedelta(days=now_time.weekday(), hours=now_time.hour,
minutes=now_time.minute, seconds=now_time.second,
microseconds=now_time.microsecond)
week_end_time = week_start_time + datetime.timedelta(days=6, hours=23, minutes=59, seconds=59)
return week_start_time, week_end_time
def get_week_start_and_end_by_date_interval(start_date_str, end_date_str):
"""
给定时间(日期)区间,返回区间中所有的周起止时间列表
:param start_date_str: "2020-01-31"
:param end_date_str: "2020-05-08"
:return: ['2020-01-06 - 2020-01-12', '2019-12-30 - 2020-01-05', ...]
"""
date_list = list()
# 截止时间
end_date = datetime.datetime.strptime(end_date_str + " 00:00:00", "%Y-%m-%d %H:%M:%S")
# 起始时间所在周 - 周一和周日
start_week_monday, start_week_sunday = get_week_monday_and_sunday_by_date(start_date_str)
# 截止时间所在周 - 周一和周日
end_week_monday, end_week_sunday = get_week_monday_and_sunday_by_date(end_date_str)
if end_week_monday <= end_date:
# 结束日期 <= 给定的截止日期
date_list.append(
{end_week_monday.strftime('%Y-%m-%d'): [f"{end_week_monday.strftime('%Y-%m-%d')} - {end_week_sunday.strftime('%Y-%m-%d')}"]})
count = 1
while True:
week_start_time = end_week_monday - datetime.timedelta(days=7 * count) # 截止日期所在的周一,向前减7天取上一个周一
week_end_time = week_start_time + datetime.timedelta(days=6, hours=23, minutes=59, seconds=59) # 前一周的周日
count += 1
if week_start_time < start_week_monday:
break
date_list.append(
{week_start_time.strftime('%Y-%m-%d'): [f"{week_start_time.strftime('%Y-%m-%d')} - {week_end_time.strftime('%Y-%m-%d')}"]})
data_list = [item[key][0] for item in date_list for key in item]
return data_list[::-1]