Python计算两个时间戳间隔返回负数,结果与预期不符问题排查
问题分析与解决
首先,你得到的-686是符合代码逻辑的正确计算结果,但和预期不符的问题,根源在于对时间格式的理解以及时间顺序的处理上:
为什么会得到-686?
当用datetime.strptime配合%Y-%m-%d %H:%M:%S.%f解析时间字符串时:
x = '2018-01-28 08:58:10.83'里的.83会被解析为830000微秒(也就是830毫秒,因为1秒=1000毫秒=1000000微秒),所以x_time实际是2018-01-28 08:58:10.830000y = '2018-01-28 08:58:10.144'里的.144会被解析为144000微秒(144毫秒),对应y_time是2018-01-28 08:58:10.144000
很明显,x_time的时间点比y_time晚,所以y_time - x_time得到的是负的时间差,转换为毫秒后就是-686,这完全符合计算逻辑。
为什么预期是61?
你预期的61大概率是对时间字符串的小数部分理解有误:你可能把.83当成了83毫秒,把.144当成了144毫秒,于是误以为144-83=61毫秒,但实际上,%S.%f里的.xxx是秒的小数部分,不是直接的毫秒数。
如何得到你预期的结果?
如果目标确实是得到61毫秒的时间差,需要调整输入或代码:
- 检查时间字符串是否正确:如果实际需要两个时间的毫秒部分差为61,时间字符串应该类似:
- x:
'2018-01-28 08:58:10.144' - y:
'2018-01-28 08:58:10.205'(205-144=61毫秒)
- x:
- 调整时间顺序:如果是想计算
x_time比y_time晚多少毫秒,把代码中的差值计算改成:diff = x_time - y_time duration_milliseconds = round(diff.total_seconds() * 1000) print(duration_milliseconds) # 输出686
内容的提问来源于stack exchange,提问作者PythonDev
相关产品推荐
相关产品推荐

