有没有办法在不使用时间增量的情况下使用日期时间将字符串转换为毫秒?



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

例如: t = "00:05:52.654321" 应转换为: i = 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)

只是感觉没有必要像这样使用时间增量。

由于时间戳是相对于 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.

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

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

最新更新