算「当前时间往前推一段」,标准库用 datetime.timedelta;要按「年 / 月」推,用 dateutil.relativedelta。两者不是一回事。
timedelta 支持的是固定长度:days、seconds、microseconds,以及换算进来的 milliseconds、minutes、hours、weeks。没有 years、months——一个月不是固定天数。
python
from datetime import datetime, timedelta
from dateutil.relativedelta import relativedelta
now = datetime.now()
print(now.strftime("%Y-%m-%d %H:%M:%S"))
print((now - timedelta(minutes=1)).strftime("%Y-%m-%d %H:%M:%S"))
print((now - timedelta(days=7)).strftime("%Y-%m-%d %H:%M:%S"))
print(now.strftime("%Y-%m-%d 00:00:00"))
print(now.strftime("%Y-01-01 00:00:00"))跨年、跨月用 relativedelta(需 pip install python-dateutil):
python
print((now - relativedelta(years=1)).strftime("%Y-%m-%d %H:%M:%S"))
print((now + relativedelta(months=1)).strftime("%Y-%m-%d %H:%M:%S"))strftime 只负责格式。今天 0 点、今年最后一秒,用格式化拼出来即可,不必上相对时间。接口测试里常要这组边界,但逻辑就是这几行,不必绑在某个业务 fixture 上。