在 Python 中,可以使用 datetime 模块来处理日期和时间的计算,包括相减操作,以下是详细的说明和示例:

基本用法:datetime 对象相减
两个 datetime 对象相减会返回一个 timedelta 对象,表示时间差。
from datetime import datetime # 创建两个 datetime 对象 dt1 = datetime(2025, 10, 1, 12, 0, 0) dt2 = datetime(2025, 10, 1, 10, 30, 0) # 计算时间差 delta = dt1 - dt2 print(delta) # 输出: 1:30:00 print(type(delta)) # 输出: <class 'datetime.timedelta'>
timedelta 对象的属性
timedelta 对象包含以下属性,方便获取具体的时间差:
days:天数seconds:秒数(0 ≤ seconds < 86400)microseconds:微秒数(0 ≤ microseconds < 1000000)
delta = dt1 - dt2 print(delta.days) # 输出: 0(不足一天) print(delta.seconds) # 输出: 5400(1小时30分钟 = 5400秒) print(delta.total_seconds()) # 输出总秒数: 5400.0
计算总秒数或总天数
使用 total_seconds() 方法获取总秒数,或通过 days 获取天数:
delta = dt1 - dt2
total_seconds = delta.total_seconds() # 总秒数
total_days = delta.days # 天数(忽略不足一天的部分)
print(f"总秒数: {total_seconds}") # 输出: 5400.0
print(f"天数: {total_days}") # 输出: 0
处理日期(date 对象相减)
如果只需要日期部分(不含时间),可以用 date 对象相减:

from datetime import date d1 = date(2025, 10, 1) d2 = date(2025, 9, 1) delta = d1 - d2 print(delta) # 输出: 30:00:00 print(delta.days) # 输出: 30
加减 timedelta 对象
可以通过 timedelta 对象对 datetime 进行加减操作:
from datetime import datetime, timedelta dt = datetime(2025, 10, 1, 12, 0, 0) # 加上 3 天 dt_plus_3days = dt + timedelta(days=3) print(dt_plus_3days) # 输出: 2025-10-04 12:00:00 # 减去 2 小时 dt_minus_2hours = dt - timedelta(hours=2) print(dt_minus_2hours) # 输出: 2025-10-01 10:00:00
常见错误与注意事项
-
类型不匹配:
datetime和date不能直接相减,需统一类型:dt = datetime(2025, 10, 1) d = date(2025, 9, 1) # 错误示例:dt - d 会报 TypeError # 正确做法:dt.date() - d delta = dt.date() - d # 转换为 date 对象再相减
-
时区问题:如果涉及时区,需使用
pytz或 Python 3.9+ 的zoneinfo:from datetime import datetime, timedelta import pytz tz = pytz.timezone("Asia/Shanghai") dt1 = tz.localize(datetime(2025, 10, 1, 12, 0)) dt2 = tz.localize(datetime(2025, 10, 1, 10, 0)) delta = dt1 - dt2 # 输出: 2:00:00
实际应用示例
计算两个时间点之间的间隔(如代码执行时间):

start_time = datetime.now()
# 模拟耗时操作
import time
time.sleep(2)
end_time = datetime.now()
delta = end_time - start_time
print(f"耗时: {delta.total_seconds():.2f} 秒") # 输出类似: 耗时: 2.00 秒
datetime相减 → 返回timedelta对象。timedelta属性:days、seconds、microseconds。- 总秒数:用
total_seconds()。 - 日期相减:用
date对象。 - 加减操作:通过
timedelta实现。
如果需要更复杂的日期计算(如月份相减),建议使用 dateutil 或 pandas 库。
