我们经常在离线任务中,用到基于输入的日期参数,计算指定日期范围内的相关数据统计,如统计从昨天算起近 30 天每天的统计数据,这里列出 python 几种常用的时间日期范围遍历操作。
推荐方式
利用 python 标准库的 datetime 模块的 date 和 timedelta 类进行范围限定,并结合 range 内置函数进行遍历。
假设输入的参数是昨天的日期,遍历最近每天的日期,并对每天进行业务 todo,示例如下:
from datetime import datetime, timedelta
# 模拟输入的昨日日期参数
from_arg_dt = '2020-09-07'
# 字符串日期转换成 datetime.datetime 对象
end_datetime = datetime.strptime(from_arg_dt, '%Y-%m-%d')
# 遍历近 30 天的日期
for i in range(30):
# datetime 对象和 timedelta 对象可以进行日期时间加减操作,返回的是新的 datetime 对象
dt = end_datetime - timedelta(days=30 - i)
# 如需,也可以转换成 str 对象
dt_str = dt.strftime('%Y-%m-%d')
# todo other things
如果明确指定的日期的起始时间,遍历操作代码如下:
from datetime import date, timedelta
# 模拟输入起始及截止日期
begin = date(2020, 8, 20)
end = date(2020, 9, 7)
# range 函数进行遍历
for i in range((end - begin).days + 1):
# date 对象和 timedelta 进行时间间隔计算,并返回 date 对西那个
day = begin + timedelta(days=i)
# 也可以根据需要,转换成 str 字符串对象
day_str = day.strftime('%Y-%m-%d')
# todo other things
datetime 模块的其中一个核心 api 是,timedelta 对象可以和 datetime、date、time 对象进行时间加减操作,且返回的还是原有对象类型(新的对象)。