Разбор метки времени с отсутствующим годом - PullRequest
0 голосов
/ 20 февраля 2020

Я пишу сценарий 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 больше года назад - но в этих случаях система все равно будет в беде из-за пропущенного года в метке времени.

Так что для моего использования приведенный выше код работает, но мне не нравится его "запах", он кажется грязным. Есть ли лучший способ установить год в метке времени? Конечно, я мог манипулировать своей текущей стоимостью, но это, насколько я вижу, привело бы меня к тому же маршруту.

...