Если заявление между двумя моментами - PullRequest
0 голосов
/ 26 мая 2020

У меня есть следующий код:

if date.datetime.now().strftime('%H:%M:%S') != ( date.time(hour = 23, minute = 59, second = 59) and date.time(hour = 13, minute = 35, second =01)):
    print("ok")

Я хочу напечатать нормально, если время не между полуночью и 13:00, 15 минут и 1 секунда после обеда. Этот сценарий работает, но это неправильно. как я могу это исправить.

Ответы [ 3 ]

3 голосов
/ 26 мая 2020

Вы можете многое упростить, так как хотите проверить диапазон между временем 0 и 13:00 15 минут.

Вам просто нужно проверить, больше ли время 13:00 15 минут

if date.datetime.now().time() > date.time(hour = 13, minute = 35, second =1):
    print("ok")
2 голосов
/ 26 мая 2020

strftime() дает вам строку. ты этого не хочешь. вы хотите сравнить объекты времени / даты и времени. Пример:

from datetime import time

t0, t1 = time(0, 0, 0), time(13, 15, 1)
test = (time(1,2,3), time(19,15,30))

for t in test:
    if t0 < t <= t1:
        print(f"ok: {t}")
    else:
        print(f"not ok: {t}")

# ok: 01:02:03
# not ok: 19:15:30 
1 голос
/ 26 мая 2020

Отредактировано:

Извините, мой предыдущий ответ был неправильным.

Я думаю, вы смотрите на диапазон, а не на сравнение равенства. Итак, сначала вам нужно сравнить с вашей текущей датой по каждому условию. Итак, вы хотите перевести формулу 13:35:01 < current_date < 23:59:59 в код. Это означает, что вам нужно сравнить current_date с каждым условием по отдельности и запустить and между двумя. Поэтому должно быть так:

current_date = date.datetime.now().strftime('%H:%M:%S')
if  current_date > date.time(hour = 23, minute = 59, second = 59) and current_date < date.time(hour = 13, minute = 35, second = 01):
    print("ok")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...