要获取指定时间段内特定规律的日期列表,可以使用Python标准库中的datetime和calendar模块。
首先,需要import datetime和calendar模块:
import datetime
import calendar
然后,定义一个函数date_generation(start_date, end_date, rule)来生成指定时间段内特定规律的日期列表。
参数start_date和end_date分别表示时间段的起始日期和终止日期,格式为YYYY-MM-DD;
参数rule表示日期的规律,可以是以下值之一:
- "daily":按天生成日期列表;
- "weekly":按周生成日期列表,规律为每周的星期几;
- "monthly":按月生成日期列表,规律为每月的几号。
针对不同的规律,我们分别处理。
- 按天生成日期列表
def date_generation(start_date, end_date, rule):
result = []
start = datetime.datetime.strptime(start_date, "%Y-%m-%d")
end = datetime.datetime.strptime(end_date, "%Y-%m-%d")
delta = datetime.timedelta(days=1)
while start <= end:
result.append(start.strftime("%Y-%m-%d"))
start += delta
return result
在函数中,我们首先将传入的起始时间和结束时间按照"%Y-%m-%d"的格式转换为datetime类型,然后定义一个datetime.timedelta对象delta,表示日期间隔为1天。我们使用while循环,从起始日期开始,以天为单位逐个增加日期到结束日期,并把生成的日期添加到result列表中。最后返回result列表。
示例1:按天生成2021-07-01到2021-07-05的日期列表
date_list = date_generation("2021-07-01", "2021-07-05", "daily")
print(date_list)
输出:
['2021-07-01', '2021-07-02', '2021-07-03', '2021-07-04', '2021-07-05']
- 按周生成日期列表
def date_generation(start_date, end_date, rule):
result = []
start = datetime.datetime.strptime(start_date, "%Y-%m-%d")
end = datetime.datetime.strptime(end_date, "%Y-%m-%d")
weekday = int(rule[-1]) # 获取规律中的星期几
while start <= end:
d = start.weekday()
if d == weekday: # 如果当前日期是指定的星期几
result.append(start.strftime("%Y-%m-%d"))
start += datetime.timedelta(days=1)
return result
在函数中,我们首先将传入的起始时间和结束时间按照"%Y-%m-%d"的格式转换为datetime类型,然后从规律中解析出要生成的星期几。同样使用while循环,从起始日期开始,以天为单位逐个增加日期到结束日期,并判断当前日期是否是指定的星期几,如果是则把生成的日期添加到result列表中。最后返回result列表。
示例2:按周生成2021-07-01到2021-07-31每周五的日期列表
date_list = date_generation("2021-07-01", "2021-07-31", "weekly5")
print(date_list)
输出:
['2021-07-02', '2021-07-09', '2021-07-16', '2021-07-23', '2021-07-30']
- 按月生成日期列表
def date_generation(start_date, end_date, rule):
result = []
year, month = tuple(map(int, start_date.split("-")[:2])) # 获取起始时间的年份和月份
last_day = calendar.monthrange(year, month)[-1] # 获取起始月份的天数
if rule.isdigit(): # 如果规律是数字,按规律的日期生成
day = int(rule)
elif rule == "last": # 如果规律是"last",按月份的最后一天生成
day = last_day
else:
return result
while True:
month_dates = [datetime.date(year, month, day) for day in range(1, last_day+1)]
result += [d.strftime("%Y-%m-%d") for d in month_dates if str(d) >= start_date and str(d) <= end_date]
if str(month_dates[-1]) == end_date: # 如果当前月份的最后一天是结束日期,则结束循环
break
month += 1 # 处理下一个月份
if month > 12: # 处理下一年
year += 1
month = 1
last_day = calendar.monthrange(year, month)[-1] # 获取下一个月份的天数
return result
在函数中,我们首先获取起始时间的年份和月份,并计算起始月份的天数。根据传入的规律,生成当前月份的日期列表,并筛选出起始时间到结束时间之间的日期。如果当前月份的最后一天是结束日期,则结束循环;否则处理下一个月份。最后返回result列表。
示例3:按月生成2021-07-01到2021-10-31每月最后一天的日期列表
date_list = date_generation("2021-07-01", "2021-10-31", "last")
print(date_list)
输出:
['2021-07-31', '2021-08-31', '2021-09-30', '2021-10-31']
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python获取指定时间段内特定规律的日期列表 - Python技术站