有没有一种方法可以在不使用 timedelta 的情况下使用 datetime 将字符串转换为毫秒?

Is there a way i can use datetime to convert a string to milliseconds without using timedelta?

我正在尝试将包含时间的字符串 ("%H:%M:%S.%f") 转换为等效毫秒数的整数。复杂的是,时间是 FFmpeg 的输出,它是音频文件中的一个点。我需要获取字符串中时间所代表的毫秒数。 DateTime中的timestamp方法是从epoche开始的毫秒数,没有我开始时的另一个时间戳,这样不行。

例如: t = “00:05:52.654321” 应转换为: 我 = 352654321

完成此任务的最佳方法是什么?

这就是我想到的方法。

def _convert_string_to_int(self, s) -> int:
    begin = datetime.datetime(1900,1,1)
    end = datetime.datetime.strptime(s, self._ffmpeg_format_string)
    return int((end - begin).total_seconds() * 1000000)

感觉真的没必要这么用timedelta

毫秒数本质上是一个时间间隔,所以datetime.timedelta实例有一个total_seconds方法而datetime.datetime是有充分理由的], datetime.datedatetime.time 没有。

原则上你可以使用datetime.datetime.time(end)得到一个属性包括hourminutesecondmicrosecond的对象,然后使用这些为同一天午夜以来经过的时间构造一个算术表达式。但是,像这样处理时间间隔的受支持方法正是您已经在使用的 timedelta 方法。

由于时间戳是相对于 Unix 纪元 (1970-01-01) 的,您可以通过在时间前面加上该日期然后获取结果对象的时间戳来从您的时间创建一个 datetime 对象时间字符串转换为秒。由于 python 时间戳是自纪元以来秒数的浮点表示,因此您需要乘以 1000 并转换为整数以获得毫秒数:

from datetime import datetime

t = "00:05:52.654321"
d = datetime.strptime('1970-01-01 ' + t, '%Y-%m-%d %H:%M:%S.%f')
print(int(d.timestamp()*1000))

输出:

352654

如果您真的想要微秒,请乘以 1000000

作为替代方案,您可以在 : 上拆分时间字符串并对各部分求和,乘以 603600 将小时和分钟部分转换为秒:

t = "00:05:52.654321"

millisecs = int(sum([float(v) * 1000 * 60 ** (2 - i) for i, v in enumerate(t.split(':'))]))
print(millisecs)

输出:

352654

同样,如果您想要微秒,只需乘以 1000000 而不是 1000