Python 如何睡眠到特定时间YYYY-MM-DD HH:MM:SS?

Python 如何睡眠到特定时间YYYY-MM-DD HH:MM:SS?,python,sleep,timedelta,Python,Sleep,Timedelta,我一直在考虑做一个睡眠功能,它会一直睡到某个日期被调用。我的想法基于日期,例如:2019-01-20 12:00:00 我还没有真正弄明白如何开始解决这个问题。我的想法是类似的,比如 if there is a date given: time.sleep(until the date and time) 因此,问题是我如何才能睡到2019-01-20 12:00:00的某个特定时间?简单,计算它有多长时间,然后再睡多久。 您可以计算到达唤醒时间和睡眠增量时间所需的时间 Python可以

我一直在考虑做一个睡眠功能,它会一直睡到某个日期被调用。我的想法基于日期,例如:2019-01-20 12:00:00

我还没有真正弄明白如何开始解决这个问题。我的想法是类似的,比如

if there is a date given:
   time.sleep(until the date and time)
因此,问题是我如何才能睡到2019-01-20 12:00:00的某个特定时间?

简单,计算它有多长时间,然后再睡多久。 您可以计算到达唤醒时间和睡眠增量时间所需的时间

Python可以计算时间间隔。如果从另一个时间戳中减去一个时间戳,则得到一个
datetime.timedelta

import datetime
import time

target = datetime.datetime(2019,1,20,12,0,0)

now = datetime.datetime.now()
delta = target - now
if delta > datetime.timedelta(0):
    print('will sleep: %s' % delta)
    time.sleep(delta.total_seconds())
    print('just woke up')
当然,您可以将其放在函数中:

import datetime
import time

target = datetime.datetime(2019,1,20,12,0,0)


def sleep_until(target):
    now = datetime.datetime.now()
    delta = target - now

    if delta > datetime.timedelta(0):
        time.sleep(delta.total_seconds())
        return True


sleep_until(target)
您可以检查返回值:只有当它处于睡眠状态时,才会返回True

顺便说一句:可以用过去的日期作为目标。这将产生负秒数。如果睡眠为负值,则无法睡眠

如果您的时间是字符串,请使用以下命令:

target = datetime.datetime.strptime('20.1.2019 20:00:00', '%d.%m.%Y %H:%M:%s')


您可以使用
while
循环

import datetime
_theday="01/01/2019"
while datetime.today() != _theday:
    some stuff

你的意思是这样的:

from time import sleep
from datetime import datetime

x = datetime.datetime.strptime('2019-01-20 12:00:00', '%Y-%m-%d %H:%M:%S')
y = datetime.now()

sleep((max(x,y) - min(x,y)).seconds)

我有效地解决了你的问题:

import time, datetime
# given_date --> Your target time and date
dur = time.mktime(datetime.datetime.strptime(given_date, "%d-%b-%y %H:%M:%S").timetuple()) - time.time()
time.sleep(dur)

你的意思是计算从现在到给定日期的时间是多少秒?我可以这样做,但我想也许有更好的方法,你只需给一个函数一个日期和时间,它会自动休眠到那个时候:)?哦,对了!我希望它能正常工作!我唯一能确定的是,我想在
datetime.datetime
中输入
2019-01-20 12:00:00
,因为它是字符串而不是datetime对象,所以我认为它不起作用。您是否认为有一种方法可以避免手动输入日期,就像您在
2019,1,20,12,0,0
中所做的那样?如果您没有时间输入日期,我当然会理解,但无论如何!这才是真正有效的答案。如果我能把
2019-01-20 12:00:00
粘贴到DateTime中那就太好了!
target=datetime.datetime.strtime('2019-1-20 20:00:00','%Y-%m-%d%H:%m:%s')
是我想要的解决方案!我真的很感激,谢谢你!!:)我现在把这个列为答案!提示:
time.sleep()。查看
time.strtime()
将字符串转换为1970-01-01 00:00以来的秒数。如果您想这样做,因为某些代码应该在该时间运行,请查看Python标准库,它附带了一个调度程序!我猜是这样的是的。我假设它应该是x-y,因为如果你现在做时间-某个日期,你会得到负数?但是是的。其中x=2019-01-20 12:00:00哦,真奇怪。我使用
x=2019-01-20 12:00:00
尝试了这一点,我得到了'print((max(x,y)-min(x,y)).seconds)---TypeError:'>'在'datetime.datetime'和'str'实例之间不受支持,'x必须是datetime对象而不是string这是一种格式,效率非常低。我不推荐这种方法。让线程睡眠的方法要好得多,特别是当等待的时间很长的时候。
import time, datetime
# given_date --> Your target time and date
dur = time.mktime(datetime.datetime.strptime(given_date, "%d-%b-%y %H:%M:%S").timetuple()) - time.time()
time.sleep(dur)