学习目录
1. 安装deteutil包
2. 导入relativedelta类
3. 计算两个日期的差值
4. 计算1个日期和时间差相加后得到新的日期
之前在工作中遇到一个使用场景:需要计算两个日期之前的差值,比如相差了几年几月几日,查找资料发现deteutil包的relativvedelta类可以很好的解决这个问题,分享给大家。
安装deteutil包
pip install python-dateutil -i https://mirrors.aliyun.com/pypi/simple/
导入relativedelta类
from dateutil.relativedelta import relativedelta
该类初始化参数如下:
该类支持传入很多参数,具体大家可以查看类的源码。
- 支持输入两个日期计算之间的差值(dt1和dt2传入的是时间对象)
- 支持某个日期和日期差值相加后得到的新日期
计算两个日期的差值
- 场景1 给定两个日期对象,计算两个日期的差值
通过datetime转化为两个日期对象date1和date2,通过relativedelta函数计算时间差值并打印相差的年月日时分秒。
from datetime import datetime
from dateutil.relativedelta import relativedelta
date1 = datetime(2024,5,1,14,25,25)
date2 = datetime(2023,4,1,16,23,23)
delta = relativedelta(date1, date2)
print(f"相差年数:{delta.years}")
print(f"相差月数:{delta.months}")
print(f"相差天数:{delta.days}")
print(f"相差小时数:{delta.hours}")
print(f"相差分钟数:{delta.minutes}")
print(f"相差秒数:{delta.seconds}")
结果:
相差年数:1
相差月数:0
相差天数:29
相差小时数:22
相差分钟数:2
相差秒数:2
- 场景2 给定两个时间字符串,计算两个日期的差值
给定两个时间字符串date1和date2,通过datetime.striptime()函数将字符串转为时间对象。
date1 = '20240501142525'
date2 = '20230401162323'
date1 = datetime.strptime(date1,'%Y%m%d%H%M%S')
date2 = datetime.strptime(date2,'%Y%m%d%H%M%S')
#计算差值
delta = relativedelta(date1, date2)
print(f"相差年数:{delta.years}")
print(f"相差月数:{delta.months}")
print(f"相差天数:{delta.days}")
print(f"相差小时数:{delta.hours}")
print(f"相差分钟数:{delta.minutes}")
print(f"相差秒数:{delta.seconds}")
结果同上,不再赘述。
计算1个日期和时间差相加后得到新的日期
- 场景1 在2024年4月7日基础上,加上时间差1年2个月2个星期3天1个小时2分钟3秒,得到1个新日期。
from datetime import datetime
from dateutil.relativedelta import relativedelta
date = datetime(2024, 4, 7)
#使用时不需要传入dt1 和dt2参数,只需要传入时间差值
delta = relativedelta(years=1, months=2, weeks=2, days=3, hours=1, minutes=2, seconds=3)
#计算新日期
new_date = date + delta
print(new_date)
#结果:
2025-06-24 01:02:03
- 场景2 计算20240407日期后面33天是哪天
date1 = '20240407'
date1 = datetime.strptime(date1,'%Y%m%d')
delta = relativedelta(days=33)
new_date = date1 + delta
#datetime.strftime函数将日期对象转为字符串
new_date = datetime.strftime(new_date,'%Y%m%d')
print(new_date)
共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”
-----指水滴不断地滴,可以滴穿石头;
-----比喻坚持不懈,集细微的力量也能成就难能的功劳。
----感谢读者的阅读和学习,谢谢大家。