如何将类似日期时间的字符串转换为毫秒
how to convert datetime-like string into milliseconds
我有一个用户定义的函数 (return_times
),它接受 json 文件和 returns 两个类似日期时间的字符串。
time_1, time_2= return_times("file.json")
print(time_1, time_2) # outputs: 00:00:11.352 00:01:51.936
我所说的类似日期时间的字符串是指适合 '%H:%M:%S.%f'
格式的 00:00:11.352
。但是,当我尝试将它们转换为毫秒时,我得到了负值。
from datetime import datetime
dt_obj_1 = datetime.strptime(time_1, '%H:%M:%S.%f')
start_ms = dt_obj_1.timestamp() * 1000
dt_obj_2 = datetime.strptime(time_2, '%H:%M:%S.%f')
end_ms = dt_obj_2.timestamp() * 1000
print(start_ms, end_ms ) # outputs: -2209019260648.0 -2209019160064.0
如果我成功了,我想 trim 使用以下命令制作视频:
from moviepy.video.io.ffmpeg_tools import ffmpeg_extract_subclip
ffmpeg_extract_subclip("long_video.mp4", start_ms, end_ms, targetname="video_trimmed.mp4"), so just delete ` * 1000` part.
注意 ffmpeg_extract_subclip
要求其 t1
和 t2
参数以秒为单位,而不是我最初认为的以毫秒为单位。
由于这些负整数,我无法成功 运行 trim 进程。
网上搜了主要讨论年月日几种格式的,没有'%H:%M:%S.%f'
.
我可能忽略了什么?
您需要将年份日期(年、月、日)添加到 datetime
,否则这将默认为 1900 年 1 月 1 日。
你做的是这样的:
from datetime import datetime
s = "00:00:11.352"
f = '%H:%M:%S.%f'
datetime.strptime(s, f) # datetime.datetime(1900, 1, 1, 0, 0, 11, 352000)
一种方法是将日期字符串附加到您从 return_times
收到的时间字符串中
您可以将时间字符串拆分为小时、分钟、秒和毫秒,通过一些简单的数学计算,您可以得到以毫秒为单位的整个时间
我可能忽略了什么?
The default values used to fill in any missing data when more accurate
values cannot be inferred are (1900, 1, 1, 0, 0, 0, 0, 1, -1)
.
虽然纪元的开始是 1970 年。您可能会通过计算您解析的内容与默认 strptime 之间的增量来获得您想要的内容,如下所示:
import datetime
time1 = "00:00:11.352"
delta = datetime.datetime.strptime(time1, "%H:%M:%S.%f") - datetime.datetime.strptime("", "")
time_s = delta.total_seconds()
print(time_s)
产出
11.352
来自
The year 1900 was before the beginning of the UNIX epoch, which
was in 1970, so the number of seconds returned by timestamp must be
negative.
怎么办?
最好使用 time
对象而不是 datetime
对象。
from datetime import time
time_1 = "00:00:11.352"
hours, minutes, seconds = time_1.split(":")
print(time(hour=int(hours), minute=int(minutes), second=int(float(seconds)),
microsecond=int(float(seconds) % 1 * 1000000)))
我有一个用户定义的函数 (return_times
),它接受 json 文件和 returns 两个类似日期时间的字符串。
time_1, time_2= return_times("file.json")
print(time_1, time_2) # outputs: 00:00:11.352 00:01:51.936
我所说的类似日期时间的字符串是指适合 '%H:%M:%S.%f'
格式的 00:00:11.352
。但是,当我尝试将它们转换为毫秒时,我得到了负值。
from datetime import datetime
dt_obj_1 = datetime.strptime(time_1, '%H:%M:%S.%f')
start_ms = dt_obj_1.timestamp() * 1000
dt_obj_2 = datetime.strptime(time_2, '%H:%M:%S.%f')
end_ms = dt_obj_2.timestamp() * 1000
print(start_ms, end_ms ) # outputs: -2209019260648.0 -2209019160064.0
如果我成功了,我想 trim 使用以下命令制作视频:
from moviepy.video.io.ffmpeg_tools import ffmpeg_extract_subclip
ffmpeg_extract_subclip("long_video.mp4", start_ms, end_ms, targetname="video_trimmed.mp4"), so just delete ` * 1000` part.
注意 ffmpeg_extract_subclip
要求其 t1
和 t2
参数以秒为单位,而不是我最初认为的以毫秒为单位。
由于这些负整数,我无法成功 运行 trim 进程。
网上搜了主要讨论年月日几种格式的,没有'%H:%M:%S.%f'
.
我可能忽略了什么?
您需要将年份日期(年、月、日)添加到 datetime
,否则这将默认为 1900 年 1 月 1 日。
你做的是这样的:
from datetime import datetime
s = "00:00:11.352"
f = '%H:%M:%S.%f'
datetime.strptime(s, f) # datetime.datetime(1900, 1, 1, 0, 0, 11, 352000)
一种方法是将日期字符串附加到您从 return_times
您可以将时间字符串拆分为小时、分钟、秒和毫秒,通过一些简单的数学计算,您可以得到以毫秒为单位的整个时间
我可能忽略了什么?
The default values used to fill in any missing data when more accurate values cannot be inferred are
(1900, 1, 1, 0, 0, 0, 0, 1, -1)
.
虽然纪元的开始是 1970 年。您可能会通过计算您解析的内容与默认 strptime 之间的增量来获得您想要的内容,如下所示:
import datetime
time1 = "00:00:11.352"
delta = datetime.datetime.strptime(time1, "%H:%M:%S.%f") - datetime.datetime.strptime("", "")
time_s = delta.total_seconds()
print(time_s)
产出
11.352
来自
The year 1900 was before the beginning of the UNIX epoch, which was in 1970, so the number of seconds returned by timestamp must be negative.
怎么办?
最好使用 time
对象而不是 datetime
对象。
from datetime import time
time_1 = "00:00:11.352"
hours, minutes, seconds = time_1.split(":")
print(time(hour=int(hours), minute=int(minutes), second=int(float(seconds)),
microsecond=int(float(seconds) % 1 * 1000000)))