Python 蟒蛇:我们刚刚过了午夜吗

Python 蟒蛇:我们刚刚过了午夜吗,python,time,Python,Time,我有一个一直在后台运行的小脚本。每次过了午夜,我都想做点什么。脚本使用sleep函数,因此无法确定它是否在00:00:00时处于唤醒状态。所以我想用这样的代码: last_time= time.now() while True: if last_time < midnight && midnight < time.now(): # do stuff last_time= time.now() sleep(some tim

我有一个一直在后台运行的小脚本。每次过了午夜,我都想做点什么。脚本使用sleep函数,因此无法确定它是否在00:00:00时处于唤醒状态。所以我想用这样的代码:

last_time= time.now()
while True:
    if last_time < midnight && midnight < time.now():
        # do stuff
        last_time= time.now()
    sleep(some time)
last_time=time.now()
尽管如此:
如果最后一次<午夜和午夜<时间。现在():
#做事
last_time=time.now()
睡觉(一段时间)

但是我不知道如何在if语句中正确地编码行。

如果你只知道时钟时间(我指的是一天中的小时/分钟/秒),检查这一点的一种方法是查看新时间是否小于旧时间:例如,每隔一个时钟时间小于23:59:59

当然,时间处理是混乱的、可怕的,而且充满了例外——最值得注意的是,如果我们只是在秋天的时钟变化中倒退会怎么样


一个更可靠的解决方案可能是看看我们是否改变了日期:我想不出任何例子,在没有改变日期的情况下,你通过午夜。

如果你纯粹有时钟时间(我指的是一天中的小时/分钟/秒),检查这一点的一种方法是查看新时间是否小于旧时间:例如,每隔一个时钟时间小于23:59:59

当然,时间处理是混乱的、可怕的,而且充满了例外——最值得注意的是,如果我们只是在秋天的时钟变化中倒退会怎么样


一个更可靠的解决方案可能是查看我们是否更改了日期:我想不出任何不更改日期就通过午夜的例子。

您可以使用
datetime
模块将当前本地时间作为
datetime
对象。它很方便,因为这个物体包括白天。检查一下什么时候会有变化

import datetime
import time

last_day = datetime.datetime.now().day
while True:
    day = datetime.datetime.now().day
    if day != last_day:
        last_day = day
        do_your_work()
    time.sleep(some_time)

您可以使用
datetime
模块获取当前本地时间作为
datetime
对象。它很方便,因为这个物体包括白天。检查一下什么时候会有变化

import datetime
import time

last_day = datetime.datetime.now().day
while True:
    day = datetime.datetime.now().day
    if day != last_day:
        last_day = day
        do_your_work()
    time.sleep(some_time)

所以上次我做这种事情的时候,我试着保持事情的时区特定性,这对我帮助很大,所以下面是我要尝试和做的。请注意,我在这里使用了pytz库,因此您必须pip安装它。然后,您可能还想根据需要更改时区

from datetime import datetime, time
from time import sleep
import pytz


def get_times():
    my_timezone = pytz.timezone('America/Los_Angeles')
    last_time = my_timezone.normalize(datetime.now(tz=my_timezone))
    midnight = my_timezone.localize(datetime.combine(last_time.date(), time.max))
    return last_time, midnight


def main():
    last_time, midnight = get_times()

    while True:
        if last_time > midnight:
            # It's passed midnight we need to run it
            # do work here...
            # now we need to update midnight to todays midnight
            last_time, midnight = get_times()
        else:
            # we shouldn't run the work just update last time
            last_time, _ = get_times()
        sleep(10)

if __name__ == '__main__':
    main()

所以上次我做这种事情的时候,我试着保持事情的时区特定性,这对我帮助很大,所以下面是我要尝试和做的。请注意,我在这里使用了pytz库,因此您必须pip安装它。然后,您可能还想根据需要更改时区

from datetime import datetime, time
from time import sleep
import pytz


def get_times():
    my_timezone = pytz.timezone('America/Los_Angeles')
    last_time = my_timezone.normalize(datetime.now(tz=my_timezone))
    midnight = my_timezone.localize(datetime.combine(last_time.date(), time.max))
    return last_time, midnight


def main():
    last_time, midnight = get_times()

    while True:
        if last_time > midnight:
            # It's passed midnight we need to run it
            # do work here...
            # now we need to update midnight to todays midnight
            last_time, midnight = get_times()
        else:
            # we shouldn't run the work just update last time
            last_time, _ = get_times()
        sleep(10)

if __name__ == '__main__':
    main()

为什么不直接使用cron作业?在Python中,逻辑and是
而不是
&
。为什么不直接使用cron作业?在Python中,逻辑and是
而不是
&