Skip to content

算「当前时间往前推一段」,标准库用 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 上。

测试开发工程师 · 专注自动化与系统架构 | 邮箱: hansblog@atumsoul.win