Python: получить количество лет, прошедших со строки даты

Учитывая, что я начинаю со строки, например '3/6/2011', которая представляет собой месяц/день/год, а текущий день — 13 марта 2011 г. (7 дней спустя), как я могу найти количество лет, прошедших с того времени (7 дней). /365 = 0.0191780821917808) в Python?

Обратите внимание, что я хочу иметь возможность обрабатывать любую дату ввода. Однако не в любом формате, вы можете принять формат, указанный выше.


person Muhd    schedule 14.03.2011    source источник


Ответы (2)


Вы можете получить timedelta, вычитая два datetime, что дает вам много интересных способов работать с разницей во времени.

>>> import datetime
>>> before = datetime.datetime.strptime('3/6/2011','%m/%d/%Y')
>>> now = datetime.datetime.now()
>>> type(now-before)
<type 'datetime.timedelta'>
>>> (now-before).days
7
>>> float((now-before).days)/365
0.019178082191780823

EDIT: Ух ты, кто бы мог подумать, что в этом простом вопросе столько глубины. Взгляните на ответ с наибольшим количеством голосов на этот вопрос. Работа с високосными годами - "тяжелая" проблема. (Кредит @kriegar)

person Chris W.    schedule 14.03.2011
comment
Затем я разделил бы (сейчас-прежде).дней на 365, чтобы получить дробный год. - person John Percival Hackworth; 14.03.2011
comment
Разве високосные годы не являются проблемой с этим решением? - person dting; 14.03.2011
comment
У меня уже будет некоторая погрешность для моего приложения, поэтому високосные годы, вероятно, не так уж сильно беспокоят, поскольку погрешность от этого составляет ‹ 1%. Спасибо за решение - person Muhd; 14.03.2011

Все ответы выше не учитывают високосные годы. И похоже, что этот вопрос имеет отношение к вашему вопросу.

Pythonic разница между двумя датами в годах?

person dting    schedule 14.03.2011
comment
Честно говоря, в своем вопросе он задал x/365 ответ. - person Chris W.; 14.03.2011
comment
+1, но я хотел подчеркнуть, что дробные годы с использованием 365 подозрительны - person dting; 14.03.2011
comment
Отличный момент. И после прочтения вашей ссылки становится ясно, что это гораздо более сложная проблема, чем может показаться на первый взгляд, в основном потому, что мы думаем о годах как о очень последовательном измерении времени, но на самом деле оно меняется в зависимости от того, о каком году вы говорите. о. - person Chris W.; 14.03.2011