【发布时间】:2018-01-21 05:10:56
【问题描述】:
我试图在第二天开始时(00:00:00)触发一个事件。我也使用本地时区,而不是 UTC,因为触发 UTC 时间会导致第二天提早开始。这是我获取当地时间的方式:
import pytz
import datetime
tz = pytz.timezone('America/Chicago') # Set the timezone
utc_time = datetime.datetime.utcnow()
local_time = (pytz.utc.localize(utc_time, is_dst=None).astimezone(tz))
if (local_time == datetime.timedelta(days=1)):
*** My action starts here ***
但这似乎不会在当地时间 00:00:00 触发。我做错了什么?
【问题讨论】:
-
首先这里没有循环检查时间是否为 00:00:00。您运行此程序并在 1 秒窗口内执行等于 00:00:00 检查的机会非常低。您需要循环并更新 local_time,然后快速检查它是否为 00:00:00。您只有 1 秒的窗口。此外,您正在将 datetime 对象与错误的 timedelta 对象进行比较。
-
你用时差来比较时间,也就是橘子和苹果。为什么他们永远是平等的?
-
尝试
if local_time.time().strftime('%H:%M:%S') == '00:00:00':,但正如我所说,循环检查,以便您在 if 语句为真的那 1 秒内实际捕获它 -
刚刚验证,这行得通。我找到了一种将其添加到现有函数的方法,然后在始终运行的 while 循环中调用它。这是有道理的,但需要我的代码在 00:00:00 准确地处理它。我可能会尝试找到一种方法来扩大用于验证是否是第二天的时间窗口,可能只检查小时和分钟。