在时间间隔内调用函数

0 投票
2 回答
560 浏览
提问于 2025-04-15 11:29

在应用引擎中,我想在当前时间处于特定时间段内时调用一个函数。这是我现在的做法。

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

这个方法更简洁,但不太明显:

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

看起来你可能想要使用日期时间中的“时间”类型,这种类型不关心日期。

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,但我得承认我从来没有处理过时区。

撰写回答