|
|
@ -2667,16 +2667,19 @@ def parse_duration(s):
|
|
|
|
|
|
|
|
|
|
|
|
days, hours, mins, secs, ms = [None] * 5
|
|
|
|
days, hours, mins, secs, ms = [None] * 5
|
|
|
|
m = re.match(r'''(?x)
|
|
|
|
m = re.match(r'''(?x)
|
|
|
|
|
|
|
|
(?P<sign>[+-])?
|
|
|
|
(?P<before_secs>
|
|
|
|
(?P<before_secs>
|
|
|
|
(?:(?:(?P<days>[0-9]+):)?(?P<hours>[0-9]+):)?(?P<mins>[0-9]+):)?
|
|
|
|
(?:(?:(?P<days>[0-9]+):)?(?P<hours>[0-9]+):)?(?P<mins>[0-9]+):)?
|
|
|
|
(?P<secs>(?(before_secs)[0-9]{1,2}|[0-9]+))
|
|
|
|
(?P<secs>(?(before_secs)[0-9]{1,2}|[0-9]+))
|
|
|
|
(?P<ms>[.:][0-9]+)?Z?$
|
|
|
|
(?P<ms>[.:][0-9]+)?Z?$
|
|
|
|
''', s)
|
|
|
|
''', s)
|
|
|
|
if m:
|
|
|
|
if m:
|
|
|
|
days, hours, mins, secs, ms = m.group('days', 'hours', 'mins', 'secs', 'ms')
|
|
|
|
sign, days, hours, mins, secs, ms = m.group('sign', 'days', 'hours', 'mins', 'secs', 'ms')
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
m = re.match(
|
|
|
|
m = re.match(
|
|
|
|
r'''(?ix)(?:P?
|
|
|
|
r'''(?ix)(?:
|
|
|
|
|
|
|
|
(?P<sign>[+-])?
|
|
|
|
|
|
|
|
P?
|
|
|
|
(?:
|
|
|
|
(?:
|
|
|
|
[0-9]+\s*y(?:ears?)?,?\s*
|
|
|
|
[0-9]+\s*y(?:ears?)?,?\s*
|
|
|
|
)?
|
|
|
|
)?
|
|
|
@ -2700,17 +2703,19 @@ def parse_duration(s):
|
|
|
|
(?P<secs>[0-9]+)(?P<ms>\.[0-9]+)?\s*s(?:ec(?:ond)?s?)?\s*
|
|
|
|
(?P<secs>[0-9]+)(?P<ms>\.[0-9]+)?\s*s(?:ec(?:ond)?s?)?\s*
|
|
|
|
)?Z?$''', s)
|
|
|
|
)?Z?$''', s)
|
|
|
|
if m:
|
|
|
|
if m:
|
|
|
|
days, hours, mins, secs, ms = m.groups()
|
|
|
|
sign, days, hours, mins, secs, ms = m.groups()
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
m = re.match(r'(?i)(?:(?P<hours>[0-9.]+)\s*(?:hours?)|(?P<mins>[0-9.]+)\s*(?:mins?\.?|minutes?)\s*)Z?$', s)
|
|
|
|
m = re.match(r'(?i)(?P<sign>[+-])?(?:(?P<hours>[0-9.]+)\s*(?:hours?)|(?P<mins>[0-9.]+)\s*(?:mins?\.?|minutes?)\s*)Z?$', s)
|
|
|
|
if m:
|
|
|
|
if m:
|
|
|
|
hours, mins = m.groups()
|
|
|
|
sign, hours, mins = m.groups()
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
return None
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sign = -1 if sign == '-' else 1
|
|
|
|
|
|
|
|
|
|
|
|
if ms:
|
|
|
|
if ms:
|
|
|
|
ms = ms.replace(':', '.')
|
|
|
|
ms = ms.replace(':', '.')
|
|
|
|
return sum(float(part or 0) * mult for part, mult in (
|
|
|
|
return sign * sum(float(part or 0) * mult for part, mult in (
|
|
|
|
(days, 86400), (hours, 3600), (mins, 60), (secs, 1), (ms, 1)))
|
|
|
|
(days, 86400), (hours, 3600), (mins, 60), (secs, 1), (ms, 1)))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|