【问题标题】:How can I check to see when the next day starts in Python?如何在 Python 中查看第二天​​的开始时间?
【发布时间】: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 准确地处理它。我可能会尝试找到一种方法来扩大用于验证是否是第二天的时间窗口,可能只检查小时和分钟。

标签: python datetime pytz


【解决方案1】:

您正在检查时间 delta 1 天,因此如果它从 15:43 开始,则 delta +1 天将是第二天的 15:43。另一件事是,如果您错过了那个时间,它将永远不会触发。 在你的地方我会用这个:

import datetetime
from time import sleep
# get current day in month (we don't need anything else)
currentDay = datetime.datetime.now().day # datetime's now is localized
# watch for it to change
while (datetime.datetime.now().day == currentDay):
    sleep(1) # increase time if you don't need exactly at the midnight
print("Good midnight, today is...")

【讨论】:

    【解决方案2】:

    如何在没有日期时间库的情况下做到这一点:

    cur = time.localtime()
    # ...(time passes)
    if cur[:3] != time.localtime()[:3]:
        print("It's a new day!")
    

    它是如何工作的? time.localtime()[:3] 给出了 time.struct_time 的前 3 个值,比较年、月和日。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-09
      • 2013-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-15
      • 2012-09-22
      • 2021-07-23
      相关资源
      最近更新 更多