常用时间处理逻辑
1,获取指定日期或指定月份前后n个月日期
from datetime import datetime, timedelta
from dateutil.relativedelta import relativedelta
# 指定日期
date = "20200129"
add_month = (datetime.strptime(date, "%Y%m%d") + relativedelta(months=+1)).strftime("%Y%m%d")
reduce_month = (datetime.strptime(date, "%Y%m%d") - relativedelta(months=+1)).strftime("%Y%m%d")
# 指定月份
date = "202001"
add_month = (datetime.strptime(date, "%Y%m") + relativedelta(months=+1)).strftime("%Y%m")
reduce_month = (datetime.strptime(date, "%Y%m") - relativedelta(months=+1)).strftime("%Y%m")
2,获取指定日期上n个月和下n个月 月初或月末日期
from datetime import datetime, timedelta
from dateutil.relativedelta import relativedelta
# 上n个月
date = "20200129"
tmp_date = datetime.strptime(date, "%Y%m%d").strftime("%Y%m01")
month_end = (datetime.strptime(tmp_date, "%Y%m%d") - timedelta(days=1)).strftime("%Y%m%d")
month_start = datetime.strptime(month_end, "%Y%m%d") .strftime("%Y%m01")
或
month_start = (datetime.strptime(tmp_date, "%Y%m%d") - relativedelta(months=+1)).strftime("%Y%m%d")
# 下n个月
date = "20200129"
tmp_date = (datetime.strptime(date, "%Y%m%d") + relativedelta(months=+1)).strftime("%Y%m01")
month_start = tmp_date
tmp_date = (datetime.strptime(date, "%Y%m%d") + relativedelta(months=+2)).strftime("%Y%m01")
month_end = (datetime.strptime(tmp_date, "%Y%m%d") - timedelta(days=1)).strftime("%Y%m%d")
3,获取指定日期前后任意天日期
from datetime import datetime, timedelta
date = "20200129"
# 前任意天
add_date = (datetime.strptime(tmp_date, "%Y%m%d") - timedelta(days=1)).strftime("%Y%m%d")
# 后任意天
reduce_date = (datetime.strptime(tmp_date, "%Y%m%d") + timedelta(days=1)).strftime("%Y%m%d")
备注:days可以替换为 seconds、microseconds、milliseconds、 minutes、hours、 weeks 用法相同