You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何将两个Timestamp转为Datetime并获取仅含时分秒的时间差

解决Python时间差仅保留时分秒的问题

我懂你要的是什么——把两个时间戳转成datetime后算出的时间差,不想显示天数,直接把所有时长都换算成小时:分钟:秒的格式对吧?这其实不难,关键是把timedelta里的总时长转换成时分秒的拆解,而不是直接用它自带的days和seconds属性(因为seconds只存当天的秒数,不包含天数的部分)。

下面是完整的实现步骤和代码:

1. 时间戳转datetime对象

首先把你的两个时间戳转换成datetime对象,这里假设你的时间戳是秒级的(如果是毫秒级,记得除以1000):

import datetime

# 示例时间戳(替换成你实际的时间戳)
timestamp_start = 1620000000
timestamp_end = 1620234567

# 转成datetime对象
dt_start = datetime.datetime.fromtimestamp(timestamp_start)
dt_end = datetime.datetime.fromtimestamp(timestamp_end)

2. 计算时间差并格式化

计算出timedelta后,我们需要把它的总秒数拆分成小时、分钟、秒:

# 计算时间差
time_diff = dt_end - dt_start

# 计算总秒数,这样可以把天数也转换成小时
total_seconds = time_diff.total_seconds()

# 拆分小时、分钟、秒
total_hours, remainder = divmod(total_seconds, 3600)
minutes, seconds = divmod(remainder, 60)

# 格式化为两位数字的时分秒(比如 68:29:27)
formatted_diff = f"{int(total_hours):02d}:{int(minutes):02d}:{int(seconds):02d}"

print(formatted_diff)  # 输出示例:68:29:27

3. 处理负数时间差(可选)

如果有可能出现结束时间早于开始时间的情况,别忘了处理负号:

if total_seconds < 0:
    sign = "-"
    total_seconds = abs(total_seconds)
else:
    sign = ""

total_hours, remainder = divmod(total_seconds, 3600)
minutes, seconds = divmod(remainder, 60)

formatted_diff = f"{sign}{int(total_hours):02d}:{int(minutes):02d}:{int(seconds):02d}"

为啥不用timedelta.days和timedelta.seconds?因为timedelta.seconds只包含当天的秒数(0-86399),不包含天数对应的秒数,所以直接用total_seconds()会更准确,一步到位把所有时长转换成秒数,再拆分就不会出错。

内容的提问来源于stack exchange,提问作者Mariia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:02:05