Python - Сравнение даты и времени с использованием меток времени, timedelta

Я провел последний час, копаясь в документации по Python и множестве вопросов SO; пожалуйста, прости меня за то, что я еще один новичок в Python, пойманный в ловушку тайной разницы во времени в Python.

Моя цель состоит в том, чтобыdetermine the difference between the current time and a certain date/time regardless of being in the past/future and return a workable format such as seconds.

Например, если входными данными являются 14:00 и 16:00 (сейчас), я бы хотел сказать «-7200», представляя событие, произошедшее два часа назад. Если входными значениями являются пятница 16:00 (сейчас) и воскресенье 17:00, выход должен быть «176400». секунд, представляющих два дня и 1 час.

Вот что я пробовал ...

My first version was a function that took a string timestamp and pieced it to multiple variables, and then compared them. It was clunky with many errors and I imagine if I posted it here I would be responsible for a programmers throwing up.

I stumbled upon this magical timedelta function and explored the docs and SO, but I don't think it does what I'm looking for.

I had the idea to convert both timestamps into seconds since epoch and then subtract, but this becomes a problem if the subtraction is in the wrong order (different cases if the event is in the future), and I feel like adding if statements to check the sign of the seconds would be clunky and something to avoid.

Это мой текущий код (все еще должен быть исправлен для «двунаправленного» сравнения) из ранее решенного вопроса SO:

now = time.strftime("%a %b %d %H:%M:%S %Y")
then = time.ctime(os.path.getmtime("x.cache"))
tdelta = datetime.strptime(now, '%a %b %d %H:%M:%S %Y') - datetime.strptime(then, '%a %b %d %H:%M:%S %Y')

И я чувствую, что каким-то образом смогу извлечь из этого секунды, как в этом вопросе: Timethon Python: могу ли я просто получить в любую единицу времени, в которой я хочу, значение всей разницы?

Но я не знаю, как соединить эти точки.

Как я могу сделать это?

Ответы на вопрос(3)

Ваш ответ на вопрос