- 加上一个时间间隔(3天、5小时、10分钟)
- 加上另一个日期时间点(计算两个时间点之间的差值)
下面我将详细讲解这两种情况,并提供清晰的代码示例。

准备工作:导入 datetime 模块
你需要导入 Python 的 datetime 模块。
from datetime import datetime, timedelta
datetime: 用于表示一个具体的日期和时间。timedelta: 用于表示一个时间间隔(或持续时间)。
加上一个时间间隔 (timedelta)
这是最直接和最常用的方法,当你需要计算“从现在开始,3天后是什么时候”或“这个时间点往前推2个小时”时,就需要使用 timedelta。
timedelta 的常用参数
你可以创建一个 timedelta 对象来表示各种时间间隔:
days: 天数seconds: 秒数microseconds: 微秒数milliseconds: 毫秒数minutes: 分钟数hours: 小时数weeks: 周数
示例代码
加上天数、小时、分钟等

from datetime import datetime, timedelta
# 获取当前时间
now = datetime.now()
print(f"当前时间: {now}")
# 创建一个时间间隔:3天 4小时 30分钟
delta = timedelta(days=3, hours=4, minutes=30)
# 使用加法运算符 + 将时间间隔加到当前时间上
future_time = now + delta
print(f"3天4小时30分钟后是: {future_time}")
# 减法也同样适用
past_time = now - delta
print(f"3天4小时30分钟前是: {past_time}")
输出:
当前时间: 2025-10-27 10:30:00.123456
3天4小时30分钟后是: 2025-10-30 15:00:00.123456
3天4小时30分钟前是: 2025-10-24 06:00:00.123456
只加一个特定单位的时间
from datetime import datetime, timedelta
# 定义一个固定的日期时间
some_time = datetime(2025, 1, 1, 12, 0, 0)
print(f"初始时间: {some_time}")
# 加上5周
future_time_weeks = some_time + timedelta(weeks=5)
print(f"5周后是: {future_time_weeks}")
# 加上100秒
future_time_seconds = some_time + timedelta(seconds=100)
print(f"100秒后是: {future_time_seconds}")
输出:
初始时间: 2025-01-01 12:00:00
5周后是: 2025-02-05 12:00:00
100秒后是: 2025-01-01 12:01:40
加上另一个日期时间点(计算时间差)
如果你想计算两个日期时间点之间的时间差,直接使用减法()即可,结果会返回一个 timedelta 对象。

示例代码
from datetime import datetime
# 定义两个日期时间点
time1 = datetime(2025, 10, 26, 10, 0, 0)
time2 = datetime(2025, 10, 28, 15, 30, 0)
# 计算时间差
time_difference = time2 - time1
print(f"时间点1: {time1}")
print(f"时间点2: {time2}")
print(f"时间差 (time2 - time1): {time_difference}")
# 你可以从 time_difference 对象中获取具体的差值
print(f"相差的天数: {time_difference.days}")
print(f"相差的秒数: {time_difference.seconds}") # 注意:这只会返回剩余部分的秒数,不包括整天转换的秒数
print(f"相差的总秒数: {time_difference.total_seconds()}")
输出:
时间点1: 2025-10-26 10:00:00
时间点2: 2025-10-28 15:30:00
时间差 (time2 - time1): 2 days, 5:30:00
相差的天数: 2
相差的秒数: 19800 # (5 * 3600 + 30 * 60)
相差的总秒数: 202500.0 # (2 * 24 * 3600 + 5 * 3600 + 30 * 60)
重要提示:
time_difference.days返回完整的整天数。time_difference.seconds只返回剩余部分(不足一天的)的秒数。time_difference.total_seconds()返回总秒数,包括所有整天转换的秒数,这在需要精确计算时非常有用。
处理月份和年份的特殊情况
直接使用 timedelta 来增加或减少月份或年份是比较棘手的,因为每个月的天数都不同(28, 29, 30, 31)。
datetime(2025, 1, 31) + timedelta(months=1) 会引发错误,因为 timedelta 没有 months 参数。
正确的方法是使用 relativedelta
relativedelta 是 dateutil 库中的一个强大工具,专门用于处理这类复杂的日期计算。
安装 python-dateutil
如果你的环境中没有安装,需要先安装它:
pip install python-dateutil
使用 relativedelta
from datetime import datetime
from dateutil.relativedelta import relativedelta
# 示例1:安全地增加一个月
date1 = datetime(2025, 1, 31)
# 1月有31天,增加1个月是2月,但2月没有31日,所以它会自动调整到2月的最后一天
date1_plus_month = date1 + relativedelta(months=1)
print(f"{date1} 增加1个月是: {date1_plus_month}") # 输出 2025-02-28
# 示例2:增加1年2个月3天
date2 = datetime(2025, 5, 10)
date2_complex = date2 + relativedelta(years=1, months=2, days=3)
print(f"{date2} 增加1年2个月3天是: {date2_complex}") # 输出 2025-07-13
# 示例3:relativedelta 也可以用于减法
date_minus = date2 - relativedelta(years=1, months=2)
print(f"{date2} 减少1年2个月是: {date_minus}") # 输出 2025-03-10
输出:
2025-01-31 00:00:00 增加1个月是: 2025-02-28 00:00:00
2025-05-10 00:00:00 增加1年2个月3天是: 2025-07-13 00:00:00
2025-05-10 00:00:00 减少1年2个月是: 2025-03-10 00:00:00
总结与最佳实践
| 需求 | 推荐方法 | 示例 |
|---|---|---|
| 加减天、秒、小时、分钟等 | 使用 datetime 和 timedelta |
new_time = old_time + timedelta(days=7) |
| 计算两个时间点的间隔 | 使用 datetime 的减法 |
delta = time2 - time1 |
| 加减月份或年份 | 使用 dateutil.relativedelta |
new_date = old_date + relativedelta(months=3) |
记住这个核心原则:
- 固定时间间隔(如一天、一小时)用
timedelta。 - 日历相关时间间隔(如一个月、一年)用
relativedelta。
希望这个详细的解释能帮助你完全掌握 Python 中 datetime 的相加操作!
