найти разницу во времени для строки - PullRequest
0 голосов
/ 04 марта 2020

В приведенной ниже строке

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

Мне нужно найти разницу во времени

, т.е. разницу между значениями от 10:33:42 до 10: 37: 42

1 Ответ

0 голосов
/ 04 марта 2020

Разобрать его как 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, так что теперь они являются ключами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...