Получение разницы во времени между разными днями| python datetime
Мне нужно вычислить разницу между 2 датами во времени, но не понимаю, как сделать это, если разница затрагивает несколько дней или месяцев.
Приведу код:
from datetime import datetime, date, time
a = input()
if a == "Записать":
time = datetime.now(tz=None)
time = datetime.strftime(time, '%d %H:%M:%S')
time = str(time)
f = open("C:/python/time.txt", "w")
f.write(time)
f.close()
print(time)
elif a == "Сколько":
f = open("C:/python/time.txt", "r")
time1 = f.read()
f.close()
time1 = datetime.strptime(time1, "%d %H:%M:%S")
time2 = datetime.now(tz=None)
time2 = datetime.strftime(time2, '%d %H:%M:%S')
time2 = datetime.strptime(time2, "%d %H:%M:%S")
time_delta = time2 - time1
time_delta = str(time_delta)
time_delta = datetime.strptime(time_delta, "%H:%M:%S")
timer = "1:00:00"
timer = datetime.strptime(timer, "%H:%M:%S")
if time_delta > timer:
print("Прошло больше часа!")
elif time_delta < timer:
time_delta = timer - time_delta
time_delta = str(time_delta)
time_delta = datetime.strptime(time_delta, "%H:%M:%S").time()
time_delta = str(time_delta)
print("Прошло меньше часа, осталось " + time_delta)
Он будет работать только в том случае, если день остаётся одинаковым, но выдаёт ошибку ValueError: time data '1 day, 0:00:26' does not match format '%H:%M:%S', если день будет другим. Проба time_delta не удалась, ибо насколько я понимаю, он может вычислять только или разницу в днях или разнцу во времени, по крайней мере так я понял
Ответы (1 шт):
Ваш код можно упростить. Не надо лишний раз переводить в строки, потом обратно.
В "записать" Вы получаете текущее время через datetime.now(). Дальше в строку в ISO-формате now.isoformat() и записываем в файл.
По считыванию обратный процесс. Прочитали, преобразовали ISO-формат в переменную before = datetime.fromisoformat(f.read()). Дальше берем разницу. Она будет в формате объекта timedelta. Ее сравниваем с timedelta(hours=1) в один час. По итогам выводим результат.
from datetime import datetime, timedelta
a = input('Введите Записать или Сколько: ')
if a == 'Записать':
now = datetime.now()
with open('time.txt', 'w') as f:
f.write(now.isoformat()) # Преобразуем в строку. Получаем время в ISO формате
elif a == 'Сколько':
with open('time.txt', 'r') as f:
before = datetime.fromisoformat(f.read()) # Считываем в ISO формате
delta = datetime.now() - before
if delta > timedelta(hours=1):
print('Прошло больше часа!')
else:
print('Прошло меньше часа, осталось {} '.format(timedelta(hours=1) - delta))