如何对时间戳求和 Python

How to sum timestamps Python

我正在使用糟糕的库 datetime 并且我试图做一些本应非常简单的事情。我的视频文件中有一组时间戳,我想简单地从 end_time 中减去 start_time,然后取所有和输出的总和,即视频文件的总时间。我的视频文件中的数据如下所示

<p begin="00:02:42.400" end="00:02:43.080" style="s2">product_1</p>

所以我的代码,

start_time = dt.strptime(begin, '%H:%M:%S.%f')
endie_time = dt.strptime(end, '%H:%M:%S.%f')

diff += endie_time-start_time

我想做的是不断加起来'diff'

我收到这个错误,

UnboundLocalError: 赋值前引用局部变量'diff'

我认为错误是因为 diff 是一个日期时间对象而不是整数。但是当我做 `int(diff) 时,没有任何效果。

我怎样才能完成这个简单的任务?我很感激在这个恼人的问题上能得到的任何帮助。

谢谢

正如对原始问题的评论所说,使用 X += Y 要求您已经定义了 X。

可能的解决方法是:

import datetime as dt

diff = dt.timedelta(0)  # Initialize the diff with 0

start_time = dt.datetime.strptime(begin, '%H:%M:%S.%f')
endie_time = dt.datetime.strptime(end, '%H:%M:%S.%f')

diff += endie_time-start_time  # Accumulate the time difference in diff 

因为您似乎想要遍历多个 star/end 日期:

import datetime as dt

diff = dt.timedelta(0)  # Initialize the diff with 0

for begin_i, end_i in zip(begin, end):

    start_time = dt.datetime.strptime(begin_i, '%H:%M:%S.%f')
    endie_time = dt.datetime.strptime(end_i , '%H:%M:%S.%f')

    diff += endie_time-start_time  # Accumulate the time difference in diff 

在上述两种情况下,diff 都是 dt.timedelta 类型。

这里的根本问题是 datetime 模块处理真实世界的挂钟时间,而您试图处理 durations。因此,datetime 模块中唯一真正适用的 class 可以适当地处理您的问题,因此是 timedelta,它本质上表示持续时间。要将您的字符串解析为 timedelta,您需要稍微手动执行此操作:

>>> from datetime import timedelta
>>> h, m, s = '00:02:43.080'.split(':')
>>> timedelta(hours=int(h), minutes=int(m), seconds=float(s))
datetime.timedelta(seconds=163, microseconds=80000)

如果你现在有两个这样的timedelta,你可以减去它们:

>>> end - start
datetime.timedelta(microseconds=680000)

您可以将它们添加到现有 timedelta:

diff = timedelta()
diff += end - start

完整示例:

from datetime import timedelta

diff = timedelta()

def parse_ts(ts: str) -> timedelta:
    h, m, s = ts.split(':')
    return timedelta(hours=int(h), minutes=int(m), seconds=float(s))

timestamps = [('00:02:42.400', '00:02:43.080'), ...]

for start, end in timestamps:
    diff += parse_ts(end) - parse_ts(start)

print(diff)