Разница между строкой времени и текущим временем без года - PullRequest
0 голосов
/ 27 апреля 2018

Я хочу определить разницу между строкой даты и текущим временем. Проблема в том, что строка времени не содержит год (но текущая дата и время содержат, что может помешать смене года?)

Вот мой текущий код:

date_parsed = datetime.strptime('Fri Apr 27 19:09:53', '%a %b %d %H:%M:%S')
current_time = datetime.now()

Ответы [ 3 ]

0 голосов
/ 27 апреля 2018

Вы могли бы сделать это с total_seconds и по модулю арифметики, но тогда я думаю, что у вас есть проблемы с такими вещами, как високосные годы. Вероятно, лучший способ - попробовать две замены:

tdiff = current_time - date_parsed.replace(year=current_time.year)
if tdiff.days < 0:
  tdiff = current_time - date_parsed.replace(year=current_time.year-1)
0 голосов
/ 27 апреля 2018

Вы можете использовать метод .strftime() для синхронизации ваших string time и current time следующим образом:

from datetime import datetime


date_parsed = datetime.strptime('Fri Apr 27 19:09:53', '%a %b %d %H:%M:%S')
current_time = datetime.now().strftime("%m-%d %H:%M:%S")

date_ = date_parsed.strftime("%m-%d %H:%M:%S")
0 голосов
/ 27 апреля 2018

Можно предположить, что date_parsed произошло в течение последних 365 дней, верно?

В этом случае используйте .replace(), чтобы изменить год этой даты, сравнить его с текущей датой и адаптировать год в соответствии с результатом этого сравнения: если дата более поздняя, ​​то проанализированная дата должна быть адаптированным, в остальном все нормально:

from datetime import datetime

current_time = datetime.now()
date_parsed = datetime.strptime('Fri Apr 27 14:09:53', '%a %b %d %H:%M:%S').replace(year=current_time.year)

if date_parsed > current_time:
  date_parsed = date_parsed.replace(year=current_time.year - 1)

print(date_parsed, current_time, current_time - date_parsed)

например. с датой в «прошлом»:

2018-04-27 14:09:53 2018-04-27 18:28:10.484371 4:18:17.484371

например. с датой в «будущем»:

2017-04-30 14:09:53 2018-04-27 18:30:48.864598 362 days, 4:20:55.864598
...