session = requests.Session()
session.max_redirects = 50 # сколько редиректов позволять
session.get(url)
from os import system
from time import sleep
from datetime import timedelta
# незачем предварительно присваивать 0 переменным,
# если их всё равно перезаполняем значениями
s = int(input('seconds: '))
m = int(input('minutes: '))
h = int(input('hours: '))
# в timedelta удобнее хранить интервалы
time_left = timedelta(hours=h, minutes=m, seconds=s)
# также timedelta поддерживает арифметику и сравнения
step = timedelta(seconds=1) # вот почему шаг - тоже timedelta
# сравнение интервалов вполне себе работает
while time_left >= step:
system('CLS')
print(time_left)
# а такой приём позволяет обновлять таймер не каждую секунду,
# а с заданным шагом, при этом достаточно указать нужный step
sleep(step.total_seconds)
# интервалы времени можно складывать и вычитать
time_left -= step # то же, что и time_left = time_left - step
print('end')
input('Tap ENTER for exit')
б) Если нужно задавать локальное время, посмотри в сторону класса datetime.timezone и параметра tzinfo в конструкторе datetime.datetime.
Я бы сказал, тебе нужно создать timezone, соответствующий локальному времени и использовать его для конструирования объекта datetime.
Затем вызываешь для этого объекта метод .astimezone(tz=datetime.timezone.utc), и получишь время в UTC, соответствующее заданному в начале. Оттуда уже проще, хотя бы через тот же метод .timetuple()