Легко, посчитайте, сколько это времени, и спите время.
Вы можете рассчитать, сколько времени потребуется, пока не наступит время вашего пробуждения, и поспите в течение времени дельты.
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')
или
target = datetime.datetime.strptime('2019-1-20 20:00:00', '%Y-%m-%d %H:%M:%s')