relativedelta的使用基础
class relativedelta(object):
def __init__(self, dt1=None, dt2=None,
years=0, months=0, days=0, leapdays=0, weeks=0,
hours=0, minutes=0, seconds=0, microseconds=0,
year=None, month=None, day=None, weekday=None,
yearday=None, nlyearday=None,
hour=None, minute=None, second=None, microsecond=None):
某日的后一天和前一天
from datetime import datetime as dt, timedelta
from dateutil.relativedelta import relativedelta
someday = "20220325"
someday = dt.strptime(str(someday), "%Y%m%d")
gap_date = relativedelta(days=1)
print(type(gap_date))
tomorrow_date = (someday + gap_date).strftime("%Y%m%d")
print("tomorrow_date----->", tomorrow_date)
yesterday_date = (someday - gap_date).strftime("%Y%m%d")
print("yesterday_date----->", yesterday_date)
<class 'dateutil.relativedelta.relativedelta'>
tomorrow_date-----> 20220326 # 某日第二天
yesterday_date-----> 20220324 # 某日前一天
某日的未来一周、近一周
from datetime import datetime as dt
from dateutil.relativedelta import relativedelta
someday = "20220325"
someday = dt.strptime(str(someday), "%Y%m%d")
gap_date = relativedelta(weeks=1)
next_week = (someday + gap_date).strftime("%Y%m%d")
print("next_week----->", next_week)
last_week = (someday - gap_date).strftime("%Y%m%d")
print("last_week----->", last_week)
# 结果
next_week-----> 20220401
last_week-----> 20220318
最近一周、最近二周、最近一月、最近一年
from datetime import datetime as dt
from dateutil.relativedelta import relativedelta
someday = "20220325"
someday = dt.strptime(str(someday), "%Y%m%d")
# 最近一周
last1w = (someday - relativedelta(weeks=1)).strftime('%Y%m%d')
print(last1w)
# 最近二周
last2w = (someday - relativedelta(weeks=2)).strftime('%Y%m%d')
print(last2w)
# 最近一月
last1m = (someday - relativedelta(months=1)).strftime('%Y%m%d')
print(last1m)
# 最近一年
last1y = (someday - relativedelta(years=1)).strftime('%Y%m%d')
print(last1y)
# 结果
20220318
20220311
20220225
20210325
最近一自然周、最近两自然周
计算当前日期是一周的第几天
from datetime import datetime as dt, timedelta
someday = "20220325"
someday = dt.strptime(str(someday), "%Y%m%d")
week_num = someday.isoweekday()
print(week_num)
# 结果
5 # 代表本周的第五天,星期五的意思
计算最近一自然周
from datetime import datetime as dt
from dateutil.relativedelta import relativedelta
someday = "20220325"
someday = dt.strptime(str(someday), "%Y%m%d")
# 最近一自然周
natural_last1w = (someday - relativedelta(days=someday.isoweekday() - 1)).strftime('%Y%m%d')
print(natural_last1w)
# 结果
20220321
计算最近二自然周
from datetime import datetime as dt, timedelta
from dateutil.relativedelta import relativedelta
# 这个实现近一自然周的相对增量
relativedelta(days=someday.isoweekday() - 1)
#近二个自然周,如上日期增加7天即可
relativedelta(days=someday.isoweekday() + 6)
someday = "20220325"
someday = dt.strptime(str(someday), "%Y%m%d")
# 最近二自然周
natural_last2w = (someday - relativedelta(days=someday.isoweekday() + 6)).strftime('%Y%m%d')
print(natural_last2w)
# 结果:
20220314
最近一自然月、最近两自然月, 最近一自然年
from datetime import datetime as dt
someday = "20220325"
someday = dt.strptime(str(someday), "%Y%m%d")
re_day = someday.replace(day=1).strftime("%Y%m%d")
print(re_day)
re_month = someday.replace(month=1).strftime("%Y%m%d")
print(re_month)
re_august = someday.replace(month=8).strftime("%Y%m%d")
print(re_august)
# 结果
20220301
20220125
20220825
最近一自然月、最近二自然月
from datetime import datetime as dt
someday = "20220325"
someday = dt.strptime(str(someday), "%Y%m%d")
# 只需要日期,day对应的值改为1,即为当前月的第一天
natural_last1m = someday.replace(day=1).strftime('%Y%m%d')
print(natural_last1m)
# 结果
20220301
from datetime import datetime as dt
from dateutil.relativedelta import relativedelta
someday = "20220325"
someday = dt.strptime(str(someday), "%Y%m%d")
natural_last2m = (someday.replace(day=1) - relativedelta(months=1)).strftime("%Y%m%d")
print(natural_last2m)
# 结果
20220201