#python #datetime #time
#python #дата и время #время
Вопрос:
Я пишу код, в котором пользователю будет предложено время в форме HHMM несколько раз, используя цикл, а затем это время будет добавлено к списку. Теперь я хочу, чтобы функция выполнялась в разное время в этом списке, предоставленном пользователем.
Комментарии:
1. относительное время или статическое время?
2. что вы имеете в виду?
3. 0001 , в относительном выражении это означает, что через 1 минуту функция. В статическом термине функция запускается в 00:01 утра
4. Всегда ли время в текущий день?
5. да, время относится к тому же дню
Ответ №1:
Вы можете использовать datetime
для выполнения необходимых вычислений.
В этом примере целевое время анализируется с помощью strptime
, но дата не указана, поэтому часть времени правильная, а часть даты неправильная. Затем первые три поля (год, месяц, день) заменяются сегодняшней датой, чтобы создать объект datetime, который правильно представляет целевое время. Затем текущее время можно вычесть, чтобы получить timedelta
объект, представляющий количество времени, которое необходимо подождать, пока задача не будет запущена.
import time
import datetime
def hello():
print("hello")
def run_at_times(func, times):
today = datetime.date.today()
for hhmm in sorted(times):
dt = datetime.datetime.strptime(hhmm, "%H%M")
when = datetime.datetime(*today.timetuple()[:3],
*dt.timetuple()[3:6])
wait_time = (when - datetime.datetime.now()).total_seconds()
if wait_time < 0:
print(f'Time {when} has already passed')
else:
print(f'Waiting {wait_time} seconds until {when}')
time.sleep(wait_time)
func()
run_at_times(hello, ["1041", "1203", "1420"])