需求:系统日期(现在日期)减去一个月,并且转换格式(xxxx-xx-xx -> xxxxxxxx)
例如:由(2023-09-30)这种时间格式 转换为 (20230930)这种字符串格式
初始写法:
import datetime
today = datetime.date.today()
last_month = today.replace(month=today.month - 1).strftime("%Y%m%d")
print(last_month)
但是在后来测试的时候,发现了问题,报如下错误:
Traceback (most recent call last):
File "d:\test\python\python_learning\11.项目相关练习\14.减一月,日不在范围内.py", line 6, in <module>
last_month = today.replace(month=today.month - 1).strftime("%Y%m%d")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: day is out of range for month
测试时间是10月31日,减去一个月是9月31,然而9月是没有31日的,所有就有了如上报错。
解决:
经过调查,发现python自带一个库
dateutil.relativedelta
import datetime
from dateutil.relativedelta import relativedelta
last_month = datetime.date.today() - relativedelta(months=+1)
print(datetime.date.today(), type(datetime.date.today()))
print(last_month.strftime("%Y%m%d"), type(last_month.strftime("%Y%m%d")))
输出结果:
2023-10-31 <class ‘datetime.date’>
20230930 <class ‘str’>
9月没有31日就自动转换成9月的最后一天, 9月30日
也测试了3月31日减去一个月,输出结果为2月28(2023年)