Python3中如何将datetime时间差(delta)转换为包含天数的总秒数
解决datetime时间差转总秒数忽略天数的问题
这是个很典型的小误区!你遇到的问题根源在于timedelta.seconds这个属性的设计——它只返回时间差里“当天剩余部分”的秒数(范围是0到86399),不会自动把前面的天数转换成秒累加进去。所以当你的时间差包含完整天数时,用它就会漏掉这部分的秒数。
正确的解决方案:使用total_seconds()方法
Python的timedelta对象自带了一个total_seconds()方法,它会把时间差的所有组成部分(天数、秒数、微秒数)全部转换成总秒数,完全符合你的需求。
修改你的代码很简单,只需要把最后一行的.seconds换成.total_seconds()(另外别忘了导入datetime模块,你的代码里可能漏了这行):
from datetime import datetime oldtimefile = open('oldtime.txt', 'r+') oldtme = oldtimefile.read() datetimeobj = datetime.strptime(oldtme, "%Y-%m-%d %H:%M:%S.%f") finaltime = datetime.now() - datetimeobj print(finaltime.total_seconds()) # 这里改成total_seconds()
验证一下结果
比如你提到的时间差1 day, 22:13:30.231916:
- 1天 = 86400秒
- 22小时13分30.231916秒 = 223600 +1360 +30.231916 = 80010.231916秒
- 总秒数就是86400 + 80010.231916 = 166410.231916秒,这正是
total_seconds()会返回的结果。
如果需要整数秒的话,可以用类型转换或者取整:
print(int(finaltime.total_seconds())) # 直接截断小数部分 print(round(finaltime.total_seconds())) # 四舍五入到最近整数
内容的提问来源于stack exchange,提问作者Randorile
相关产品推荐
相关产品推荐

