在时间间隔之间调用函数

时间:2009-05-09 16:42:37

标签: python datetime time timezone

在app引擎中,如果当前时间介于特定时间间隔之间,我想调用一个函数。这就是我现在正在做的事情。

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 个答案:

答案 0 :(得分:1)

这更紧凑,但不那么明显:

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

根据您完全正确地进行计算的重要程度,您可能需要考虑夏令时(使用 pytz - 可以上传 pytz < / em>捆绑到您的应用程序到AppEngine)以及秒和毫秒编码(例如使用< '16:02'而不是<= '16:01',因为前者不依赖于秒/亚秒精度。

答案 1 :(得分:0)

好像你可能想要datetime的“时间”类型,它不关心日期。

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处理时区调整是一种更优雅的方式,但我必须承认我从未处理过时区。