timedelta 是 Python datetime 模块中的一个类,专门用于表示两个时间点之间的时间差(也叫“时间增量”),它可以精确到微秒(microseconds)。

核心要点
- 创建包含秒的
timedelta对象 - 从
timedelta对象中获取秒的总数 - 在
timedelta和datetime对象之间进行加减运算
创建包含秒的 timedelta 对象
创建 timedelta 对象最直接的方法就是在其构造函数中传入 seconds 参数。
基本用法
from datetime import timedelta
# 创建一个表示 60 秒的时间差
delta_60_seconds = timedelta(seconds=60)
print(f"60秒的时间差: {delta_60_seconds}")
# 创建一个表示 90 秒的时间差
delta_90_seconds = timedelta(seconds=90)
print(f"90秒的时间差: {delta_90_seconds}")
# 创建一个表示 3661 秒的时间差 (1小时, 1分钟, 1秒)
# timedelta 会自动进行时间单位的换算和组合
delta_3661_seconds = timedelta(seconds=3661)
print(f"3661秒的时间差: {delta_3661_seconds}")
输出:
60秒的时间差: 0:01:00
90秒的时间差: 0:01:30
3661秒的时间差: 1:01:01
结合其他时间单位
timedelta 还可以接收 days, seconds, microseconds, milliseconds, minutes, hours, weeks 等参数,它们会自动合并。
from datetime import timedelta
# 1 小时 30 分钟 45 秒
delta_1h_30m_45s = timedelta(hours=1, minutes=30, seconds=45)
print(f"1小时30分45秒: {delta_1h_30m_45s}")
# 2 天 3 秒
delta_2d_3s = timedelta(days=2, seconds=3)
print(f"2天3秒: {delta_2d_3s}")
输出:

1小时30分45秒: 1:30:45
2天3秒: 2 days, 0:00:03
从整数和浮点数创建
seconds 参数可以是整数或浮点数。
from datetime import timedelta
# 使用浮点数表示秒
delta_float = timedelta(seconds=10.5)
print(f"10.5秒: {delta_float}") # 注意:这里会显示为10秒和500000微秒
输出:
5秒: 0:00:10.500000
从 timedelta 对象中获取秒的总数
当你有一个 timedelta 对象时,如果你想知道它总共包含多少秒(一个单一的浮点数),可以使用 .total_seconds() 方法,这通常比直接访问 .seconds 属性更有用。
.total_seconds() 方法 (推荐)
这个方法返回 timedelta 对象所代表的总秒数,包括所有天、小时、分钟等换算成的秒数,结果是一个浮点数。

from datetime import timedelta
delta = timedelta(days=1, hours=2, minutes=3, seconds=4)
# 使用 .total_seconds() 获取总秒数
total_seconds = delta.total_seconds()
print(f"时间差: {delta}")
print(f"总秒数: {total_seconds}")
输出:
时间差: 1 day, 2:03:04
总秒数: 93784.0
计算过程验证:
- 1 天 = 86400 秒
- 2 小时 = 7200 秒
- 3 分钟 = 180 秒
- 4 秒 = 4 秒
- 总计 = 86400 + 7200 + 180 + 4 = 93784 秒
.seconds 属性 (不推荐用于总秒数)
.seconds 属性只返回 timedelta 对象中除去“天”之后剩下的部分所包含的秒数(0 <= seconds < 86400),这在某些特定场景下可能有用,但通常你会想要总秒数。
from datetime import timedelta
delta = timedelta(days=1, hours=2, minutes=3, seconds=4)
# 使用 .seconds 获取“剩余”秒数 (不包括天)
only_seconds = delta.seconds
print(f"时间差: {delta}")
print(f".seconds 属性返回的值: {only_seconds}") # 这只是 2:03:04 对应的秒数
输出:
时间差: 1 day, 2:03:04
.seconds 属性返回的值: 7384
计算过程验证:
- 2 小时 = 7200 秒
- 3 分钟 = 180 秒
- 4 秒 = 4 秒
- 总计 = 7200 + 180 + 4 = 7384 秒
timedelta 与 datetime 的结合使用
timedelta 最常见的用途就是用来加减 datetime 对象,以计算未来的某个时间点或过去的某个时间点。
from datetime import datetime, timedelta
# 获取当前时间
now = datetime.now()
print(f"当前时间: {now}")
# 计算从现在开始 100 秒后的时间
future_time = now + timedelta(seconds=100)
print(f"100秒后的时间: {future_time}")
# 计算从现在开始 30 分钟前的时间
past_time = now - timedelta(minutes=30)
print(f"30分钟前的时间: {past_time}")
# 计算从现在开始 1 周 3 天后的时间
far_future = now + timedelta(weeks=1, days=3)
print(f"1周3天后的时间: {far_future}")
示例输出 (会根据你运行代码的时间而变化):
当前时间: 2025-10-27 10:30:00.123456
100秒后的时间: 2025-10-27 10:31:40.123456
30分钟前的时间: 2025-10-27 10:00:00.123456
1周3天后的时间: 2025-11-06 10:30:00.123456
总结与最佳实践
| 需求 | 方法 | 示例 | 输出 |
|---|---|---|---|
| 创建秒级时间差 | timedelta(seconds=N) |
td = timedelta(seconds=125) |
0:02:05 |
| 获取总秒数 (推荐) | td.total_seconds() |
td.total_seconds() |
0 |
| 获取剩余秒数 (不推荐) | td.seconds |
td.seconds |
125 (如果td小于1天) |
| 计算未来时间 | datetime + timedelta |
now + timedelta(seconds=3600) |
当前时间 + 1小时 |
| 计算过去时间 | datetime - timedelta |
now - timedelta(minutes=5) |
当前时间 - 5分钟 |
核心建议:
- 当你想表达一个时间差时,使用
timedelta。 - 当你想知道一个
timedelta对象总共有多少秒时,始终使用.total_seconds(),它能正确处理跨越多天的时间差,是获取总秒数最可靠的方式。 - 当你需要对日期和时间进行加减运算时,将
timedelta与datetime对象一起使用。
