Как проверить, что это между воскресеньем 17:30 и пятницей 17:30? - PullRequest
1 голос
/ 22 января 2020

Как проверить, находится ли текущее время между воскресеньем 17:30 и пятницей 17:30?

Я могу найти диапазоны дня и времени отдельно, но я думаю, что время должно быть объединено с день.

import datetime
import time

now = datetime.datetime.now()
if 0 <= now.weekday() <= 4:
    print ("It's a weekday!")
    if time(17, 30) <= now.time() <= time(17, 30):
        print "and it's in range"

Ответы [ 3 ]

2 голосов
/ 22 января 2020

Вы можете просто получить дату и время самого последнего воскресенья в 17:30, а затем проверить, точно ли оно в течение 5 дней:

import datetime

now = datetime.datetime.now()
last_sunday = next((now - i * datetime.timedelta(days=1)) for i in range(7) if (now - i * datetime.timedelta(days=1)).weekday() == 6)
last_sunday_at_530 = datetime.datetime(year=last_sunday.year, month=last_sunday.month, day=last_sunday.day, hour=17, minute=30)
if (now - last_sunday_at_530) < datetime.timedelta(days=5):
    print("now is between Sunday at 5:30pm and Friday at 5:30pm")
else:
    print("Now is after 5:30pm on Friday but before Sunday at 5:30pm

Если вы хотите проверить обратное (после пятницы, но до Воскресенье), тогда вы можете просто начать с last_friday и рассчитывать только на два дня.

2 голосов
/ 22 января 2020

Время суток в пределах диапазона зависит от дня:

  1. В воскресенье время после 17:30.
  2. С понедельника по четверг время не имеет значения.
  3. В пятницу время до 5:30.

Это приводит к следующему коду:

import datetime

now = datetime.datetime.now()
d = now.weekday()
t = now.time()

if (
    d == 6 and t >= datetime.time(17, 30)     # Sunday
    or 0 <= d <= 3                            # Monday–Thursday
    or d == 4 and t <= datetime.time(17, 30)  # Friday
):
    print("In range")
2 голосов
/ 22 января 2020

Вы можете проверить следующие 3 условия:

  1. День не суббота
  2. Либо день не пятница, либо время до 17: 30
  3. Либо день не воскресенье, либо время после 17: 30

В коде это эквивалентно:

from datetime import datetime, time

now = datetime.now()

if (now.weekday != 5
    and (now.weekday != 4 or now.time() <= time(17, 30)) 
    and (now.weekday != 6 or now.time() >= time(17, 30))):
        print("In range!")
...