使用Datetime在特定时间运行Python

使用Datetime在特定时间运行Python,python,time,Python,Time,我想在每天早上8点执行脚本的一部分。我创建了一个简化的测试用例,它没有语法错误,但不能正常工作。我认为这可能是因为if语句将时间用作字符串,但它不会以任何其他方式编译。我做错了什么 import datetime while True: if datetime.datetime.now().time() == "19:00:00.000000": print "it's time!" 如果您使用的是cron,那么最好设置cron作业。但是,您的问题可以从Python

我想在每天早上8点执行脚本的一部分。我创建了一个简化的测试用例,它没有语法错误,但不能正常工作。我认为这可能是因为if语句将时间用作字符串,但它不会以任何其他方式编译。我做错了什么

import datetime

while True:
    if datetime.datetime.now().time()  == "19:00:00.000000":
        print "it's time!"

如果您使用的是
cron
,那么最好设置cron作业。但是,您的问题可以从Python内部解决:

首先,正如您所指出的,
datetime.datetime.now().time()
返回一个
datetime.time
对象,而不是字符串:

In [89]: datetime.datetime.now().time()
Out[89]: datetime.time(19, 36, 13, 388625)
另外,尽管
datetime.datetime.now().time()==datetime.time(19,0)
会 有效的Python,您有可能恰好在正确的位置执行
time()
由于
datetime.datetime.now()
具有微秒级,所以瞬间非常微弱 决议因此,最好测试当前时间是否在一定范围内 射程

但是,由于您每天只希望运行该函数一次,因此可以测量从现在到您希望运行该函数并休眠该秒数之间的总秒数:

import datetime as DT
import time

while True:
    now = DT.datetime.now()
    target = DT.datetime.combine(DT.date.today(), DT.time(hour=8))
    if target < now:
        target += DT.timedelta(days=1)

    time.sleep((target-now).total_seconds())
    # do something
将日期时间导入为DT
导入时间
尽管如此:
now=DT.datetime.now()
target=DT.datetime.combine(DT.date.today(),DT.time(小时=8))
如果目标<现在:
目标+=DT.timedelta(天数=1)
时间。睡眠((目标现在)。总秒数()
#做点什么

如果您在使用
cron
的系统上,那么最好设置cron作业。但是,您的问题可以从Python内部解决:

首先,正如您所指出的,
datetime.datetime.now().time()
返回一个
datetime.time
对象,而不是字符串:

In [89]: datetime.datetime.now().time()
Out[89]: datetime.time(19, 36, 13, 388625)
另外,尽管
datetime.datetime.now().time()==datetime.time(19,0)
会 有效的Python,您有可能恰好在正确的位置执行
time()
由于
datetime.datetime.now()
具有微秒级,所以瞬间非常微弱 决议因此,最好测试当前时间是否在一定范围内 射程

但是,由于您每天只希望运行该函数一次,因此可以测量从现在到您希望运行该函数并休眠该秒数之间的总秒数:

import datetime as DT
import time

while True:
    now = DT.datetime.now()
    target = DT.datetime.combine(DT.date.today(), DT.time(hour=8))
    if target < now:
        target += DT.timedelta(days=1)

    time.sleep((target-now).total_seconds())
    # do something
将日期时间导入为DT
导入时间
尽管如此:
now=DT.datetime.now()
target=DT.datetime.combine(DT.date.today(),DT.time(小时=8))
如果目标<现在:
目标+=DT.timedelta(天数=1)
时间。睡眠((目标现在)。总秒数()
#做点什么

如果您在使用
cron
的系统上,那么最好设置cron作业。但是,您的问题可以从Python内部解决:

首先,正如您所指出的,
datetime.datetime.now().time()
返回一个
datetime.time
对象,而不是字符串:

In [89]: datetime.datetime.now().time()
Out[89]: datetime.time(19, 36, 13, 388625)
另外,尽管
datetime.datetime.now().time()==datetime.time(19,0)
会 有效的Python,您有可能恰好在正确的位置执行
time()
由于
datetime.datetime.now()
具有微秒级,所以瞬间非常微弱 决议因此,最好测试当前时间是否在一定范围内 射程

但是,由于您每天只希望运行该函数一次,因此可以测量从现在到您希望运行该函数并休眠该秒数之间的总秒数:

import datetime as DT
import time

while True:
    now = DT.datetime.now()
    target = DT.datetime.combine(DT.date.today(), DT.time(hour=8))
    if target < now:
        target += DT.timedelta(days=1)

    time.sleep((target-now).total_seconds())
    # do something
将日期时间导入为DT
导入时间
尽管如此:
now=DT.datetime.now()
target=DT.datetime.combine(DT.date.today(),DT.time(小时=8))
如果目标<现在:
目标+=DT.timedelta(天数=1)
时间。睡眠((目标现在)。总秒数()
#做点什么

如果您在使用
cron
的系统上,那么最好设置cron作业。但是,您的问题可以从Python内部解决:

首先,正如您所指出的,
datetime.datetime.now().time()
返回一个
datetime.time
对象,而不是字符串:

In [89]: datetime.datetime.now().time()
Out[89]: datetime.time(19, 36, 13, 388625)
另外,尽管
datetime.datetime.now().time()==datetime.time(19,0)
会 有效的Python,您有可能恰好在正确的位置执行
time()
由于
datetime.datetime.now()
具有微秒级,所以瞬间非常微弱 决议因此,最好测试当前时间是否在一定范围内 射程

但是,由于您每天只希望运行该函数一次,因此可以测量从现在到您希望运行该函数并休眠该秒数之间的总秒数:

import datetime as DT
import time

while True:
    now = DT.datetime.now()
    target = DT.datetime.combine(DT.date.today(), DT.time(hour=8))
    if target < now:
        target += DT.timedelta(days=1)

    time.sleep((target-now).total_seconds())
    # do something
将日期时间导入为DT
导入时间
尽管如此:
now=DT.datetime.now()
target=DT.datetime.combine(DT.date.today(),DT.time(小时=8))
如果目标<现在:
目标+=DT.timedelta(天数=1)
时间。睡眠((目标现在)。总秒数()
#做点什么


为什么不直接使用cron呢?不熟悉cron,但这应该仍然有效,因为您特定于毫秒,它可能不会,因为毫秒是非常短的时间,很容易错过它。只要坚持使用cron,谷歌就可以引导你走上正确的道路。你为什么不直接使用cron呢?对cron不熟悉,但这应该仍然有效,因为你是特定于毫秒的,它可能不会,因为毫秒是非常短的时间,很容易错过它。只要坚持使用cron,谷歌就可以引导你走上正确的道路。你为什么不直接使用cron呢?对cron不熟悉,但这应该仍然有效,因为你是特定于毫秒的,它可能不会,因为毫秒是非常短的时间,很容易错过它。只要坚持使用cron,谷歌就可以引导你走上正确的道路。你为什么不直接使用cron呢?对cron不熟悉,但这应该仍然有效,因为你是特定于毫秒的,它可能不会,因为毫秒是非常短的时间,很容易错过它。只要坚持使用cron,谷歌就可以引导你走上正确的道路。+1用于更新答案,并带有毫秒精度的警告。因此,我只想每天运行一次代码,如果我在ra范围内进行测试