视频不是1周2天6小时21分32秒吗?
Youtube 显示为 222 小时 21 分 17 秒;1 * 7 * 24 + 2 * 24 + 6 = 222。不过,我不知道 17 秒与 32 秒的差异来自哪里;也可以是舍入误差。
在我看来,为此编写解析器并不难。不幸的是dateutil
似乎没有解析间隔,只有日期时间点。
更新:
我看到有一个包可以解决这个问题,但只是作为正则表达式功能、简洁和难以理解的语法的一个例子,这里有一个解析器:
import re
# see http://en.wikipedia.org/wiki/ISO_8601#Durations
ISO_8601_period_rx = re.compile(
'P' # designates a period
'(?:(?P<years>\d+)Y)?' # years
'(?:(?P<months>\d+)M)?' # months
'(?:(?P<weeks>\d+)W)?' # weeks
'(?:(?P<days>\d+)D)?' # days
'(?:T' # time part must begin with a T
'(?:(?P<hours>\d+)H)?' # hourss
'(?:(?P<minutes>\d+)M)?' # minutes
'(?:(?P<seconds>\d+)S)?' # seconds
')?' # end of time part
)
from pprint import pprint
pprint(ISO_8601_period_rx.match('P1W2DT6H21M32S').groupdict())
# {'days': '2',
# 'hours': '6',
# 'minutes': '21',
# 'months': None,
# 'seconds': '32',
# 'weeks': '1',
# 'years': None}
我故意不在这里从这些数据中计算确切的秒数。它看起来微不足道(见上文),但实际上并非如此。例如,从 1 月 1 日起 2 个月的距离为 58 天 (30+28) 或 59 (30+29),具体取决于年份,而从 3 月 1 日起始终为 61 天。适当的日历实施应该考虑到所有这些;对于 Youtube 剪辑长度计算,它必须是过多的。