функция вызова между временными интервалами - PullRequest
0 голосов
/ 09 мая 2009

В движке приложения я хотел бы вызвать функцию, если текущее время находится между определенным интервалом. Это то, что я делаю сейчас.

ist_time = datetime.utcnow() + timedelta(hours=5, minutes = 30)
ist_midnight = ist_time.replace(hour=0, minute=0, second=0, microsecond=0)
market_open = ist_midnight + timedelta(hours=9, minutes = 55)
market_close = ist_midnight + timedelta(hours=16, minutes = 01)
if ist_time >= market_open and ist_time <= market_close:
    check_for_updates()

Есть лучший способ сделать это.

Ответы [ 2 ]

1 голос
/ 09 мая 2009

Это более компактно, но не так очевидно:

if '09:55' <= time.strftime(
   '%H:%M', time.gmtime((time.time() + 60 * (5 * 60 + 30)))) <= '16:01':
  check_for_updates()

В зависимости от того, насколько важно для вас правильно выполнять расчеты, вы можете рассмотреть возможность перехода на летнее время (для этого используйте pytz - возможно загрузить pytz привязаны к вашему приложению в AppEngine), а также секунды и миллисекоды (например, используйте < '16:02' вместо <= '16:01', потому что первое не зависит от точности второй / подсекундной точности.

0 голосов
/ 10 мая 2009

Похоже, вам может понадобиться тип "время-дата", который не заботится о дате.

import datetime
ist_time = datetime.utcnow() + datetime.timedelta(hours=5, minutes = 30)
# Turn this into a time object (no day information).
ist_time = ist_time.time()
if datetime.time(9, 55) <= ist_time <= datetime.time(16, 1):
   ...

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

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