Как получить относительное время из строки? - PullRequest
0 голосов
/ 02 сентября 2018

Пользователь будет вводить, например, 7d 5m 4w или 7min или 6h и т. Д. В виде строки, но как мне преобразовать это в объект datetime, который я буду использовать для таймера. Я пытался использовать

time = datetime.datetime.strptime(str, "%M %H %d %m")

но это дает мне особое время, а не время. Если пользователь вводит «35 минут» или «35 метров», time должно быть временем прямо сейчас + 1 минута

1 Ответ

0 голосов
/ 02 сентября 2018

Вы можете вычесть два datetime объекта. В результате получается объект datetime.timedelta:

started = datetime.datetime.now()

str = "20 12 01 01 2019"
time = datetime.datetime.strptime(str, "%M %H %d %m %Y")

diff = time - started

print(str(diff))
print(diff.total_seconds())

Это вывод:

121 days, 0:52:12.768755
10457532.768755

На основании вашего комментария:

datetime.datetime.now() + datetime.timedelta(minutes=60)

создает datetime.datetime объект, смещающий now на один час.


Это более простой подход: time.time() измеряет секунды (как число с плавающей запятой) с 1.1.1970. Поэтому, если вы хотите выполнить какую-то работу за 0,1 секунды, вы можете написать:

import time

started = time.time()
while time.time() < started + 0.1:
    print("do some work")

Анализ пользовательского ввода для извлечения необходимых секунд с помощью datetime.datetime.strptime работает только в том случае, если ваш пользователь следует указанному формату. В противном случае вы могли бы лучше реализовать свой собственный парсер для этого.

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