Как спать до определенного времени ГГГГ-ММ-ДД ЧЧ: ММ: СС? - PullRequest
0 голосов
/ 13 января 2019

Я думал сделать функцию сна, когда она спит, пока не будет названа определенная дата. Моя идея основывалась на дате, такой как: 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?

Ответы [ 3 ]

0 голосов
/ 14 января 2019

Вы можете использовать петлю while.

import datetime
_theday="01/01/2019"
while datetime.today() != _theday:
    some stuff
0 голосов
/ 14 января 2019

вы имеете в виду что-то вроде этого:

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)
0 голосов
/ 13 января 2019

Легко, посчитайте, сколько это времени, и спите время.

Вы можете рассчитать, сколько времени потребуется, пока не наступит время вашего пробуждения, и поспите в течение времени дельты.

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')
...