我正在尝试将包含时间("%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
。
或者,您可以将时间字符串拆分为:
并将部分相加,乘以60
或3600
将小时和分钟部分转换为秒:
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.datetime
、datetime.date
和datetime.time
没有方法,这是有充分理由的。
原则上,你可以使用datetime.datetime.time(end)
来获取一个属性包括hour
、minute
、second
和microsecond
的对象,然后用这些来构造自同一天午夜以来经过的时间的算术表达式。但是,处理此类时间间隔的受支持方法正是您已经在使用的时间增量方法。