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
相关产品推荐
相关产品推荐

