解析为datetime,然后只计算差值(datetime支持减法):
from dateutil.parser import parse
date_from = parse('2020-02-20,10:33:42'.replace(',', ' '))
date_to = parse('2020-02-20,10:37:42'.replace(',', ' '))
diff = date_to - date_from
print(diff.total_seconds())
结果:240.0
我使用了.replace,因为dateutil 可以识别常见的日期时间格式——但里面的逗号不是标准的。你也可以使用your own time formatter with datetime.strptime (click for documentation)。
编辑用于在字符串本身中查找日期:因为日期中没有空格,而且我很懒,不需要正则表达式的快速解决方案:
s = 'user: root sjc-array109-MGMT "nsstats --var ds:diag:writeAdmitThrottleCount --from 2020-02-20,10:33:42 --to 2020-02-20,10:37:42 --interval 1 --diff ...'
s = s.split()
d = dict(zip(s, s[1:]))
date_from = parse(d['--from'].replace(',', ' '))
date_to = parse(d['--to'].replace(',', ' '))
diff = date_to - date_from
print(diff.total_seconds())
为什么这种惰性解决方案有效:
日期中没有空格,因此.split()(默认情况下以空格分隔)不会破坏日期。我们知道在某处有--from 后面跟着它的日期,而在某处有--to 后面跟着它的日期。
zip 从可迭代对象、第二个元素...等中生成第一个元素的元组。我使用[1:] 制作了没有第一个元素的副本。因此我们现在有一对 1st+2nd 元素,2nd+3rd,3rd+4th...
因此我们知道我们在某处有包含--from+其日期和--to+其日期的对。
所以我们应该寻找它。但同样,我很懒惰,我不想手动(循环)执行此操作。所以我做了一个字典 - 由对列表组成的字典,将第一个元素作为键,第二个元素作为值。
然后我们只查找我们的值 - 第一个元素是 --from 和 --to,所以它们现在是键。