如何睡到特定时间 YYYY-MM-DD HH:MM:SS?
How to sleep until a specific time YYYY-MM-DD HH:MM:SS?
我一直在考虑做一个睡眠函数,它会一直睡到某个日期被调用。我的想法是基于日期,例如: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)
您可以检查 return 值:只有当它睡觉时,它 return 才为真。
顺便说一句:可以,使用过去的日期作为目标。这将产生负数的秒数。睡负值就是睡不着
如果你的时间是一个字符串,使用这个:
target = datetime.datetime.strptime('20.1.2019 20:00:00', '%d.%m.%Y %H:%M:%s')
或
target = datetime.datetime.strptime('2019-1-20 20:00:00', '%Y-%m-%d %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)
我一直在考虑做一个睡眠函数,它会一直睡到某个日期被调用。我的想法是基于日期,例如: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)
您可以检查 return 值:只有当它睡觉时,它 return 才为真。
顺便说一句:可以,使用过去的日期作为目标。这将产生负数的秒数。睡负值就是睡不着
如果你的时间是一个字符串,使用这个:
target = datetime.datetime.strptime('20.1.2019 20:00:00', '%d.%m.%Y %H:%M:%s')
或
target = datetime.datetime.strptime('2019-1-20 20:00:00', '%Y-%m-%d %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)