Я пишу сценарий python для извлечения некоторой информации из файла журнала. В этом файле отметка времени записывается в формате «% b% d% H:% M:% S» или 20 февраля 09:24:27, т. Е. Отсутствует год. Я хочу иметь возможность сравнить это с текущим временем, поэтому мне нужно преобразовать его в объект datetime.
так я и сделал:
timeformat='%b %d %H:%M:%S'
timestamp=datetime.strptime(timetext,timeformat)
, который затем вернул 1900-02-20 09:27:45 за вышеупомянутую отметку времени - то есть со 120 годами, как я пишу это в 2020 году .
Моя первая идея исправить это состояла в том, чтобы просто сделать
now=datetime.now()
timeformat='%b %d %H:%M:%S'
timestamp=datetime.strptime(timetext,timeformat)
timestamp.replace(year=now.year)
Но перед тем, как написать это, я понял, что это не будет работать, если в файле есть записи прошлого года. В конце я проверил юлианскую дату временной метки по сравнению с юлианской датой сейчас, так что теперь моя процедура синтаксического анализа выглядит как
timestamp=datetime.strptime(timetext,timeformat)
if timestamp.timetuple().tm_yday>now.timetuple().tm_yday:
year=now.year-1
else:
year=now.year
timestamp=timestamp.replace(year=year)
Конечно, это не будет работать, если у меня есть запись в журнале почти один год назад, тот же самый юлианский день, но позже в тот же день, и он не будет работать, если я go больше года назад - но в этих случаях система все равно будет в беде из-за пропущенного года в метке времени.
Так что для моего использования приведенный выше код работает, но мне не нравится его "запах", он кажется грязным. Есть ли лучший способ установить год в метке времени? Конечно, я мог манипулировать своей текущей стоимостью, но это, насколько я вижу, привело бы меня к тому же маршруту.