在时间间隔内调用函数
在应用引擎中,我想在当前时间处于特定时间段内时调用一个函数。这是我现在的做法。
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,但我得承认我从来没有处理过时区。