繁体   English   中英

如何对时间戳求和 Python

[英]How to sum timestamps Python

我正在使用糟糕的库日期时间,我试图做应该很容易的事情。 我的视频文件中有一组时间戳,我想简单地从 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

我想要做的是不断增加“差异”

我收到这个错误,

UnboundLocalError:赋值前引用了局部变量“diff”

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

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

谢谢

这里的基本问题是datetime模块处理真实世界的挂钟时间,而您正在尝试处理持续时间 因此, datetime模块中唯一真正适用于处理您的问题的类是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 s,你可以减去它们:

>>> 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)

正如对原始问题的评论所说,使用 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 

由于您似乎想要迭代多个星号/结束日期:

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 类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM