Разобрать его как 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
распознает распространенные форматы даты и времени - но запятая внутри не является стандартом. Вы также можете использовать свой собственный форматер времени с datetime.strptime
(щелкните для документации) .
РЕДАКТИРОВАТЬ Для поиска дат в самой строке: с даты не содержат пробелов, и я ленив, быстрое решение, не требующее регулярных выражений:
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-х элементов из обоих итерируемых, 2-х элементов ... и так далее. Я использовал [1:]
, чтобы сделать копию без первого элемента. Таким образом, теперь у нас есть пары 1-го + 2-го элементов, 2-го + 3-го, 3-го + 4-го ...
Таким образом, мы знаем, что где-то есть пары, содержащие --from
+ его дату и --to
+ его дату.
Так что мы должны искать это. Но опять же, я ленивый, я не хочу делать это вручную (в al oop). Поэтому я создал словарь - словарь, составленный из списка пар, в качестве ключа используются 1-й элемент пары, а в качестве значения - второй элемент.
Затем мы просто ищем наши значения - первые элементы были --from
и --to
, так что теперь они являются ключами.