Python 蟒蛇:我们刚刚过了午夜吗
我有一个一直在后台运行的小脚本。每次过了午夜,我都想做点什么。脚本使用sleep函数,因此无法确定它是否在00:00:00时处于唤醒状态。所以我想用这样的代码: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
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是和而不是&
。