2015-05-28 2 views
2

У меня есть запрос о датах питона ... Я бы точно знал дату N_YEARS назад. Итак, я попробовал этот простой код:Знайте точно дату N лет назад

years_count = N_YEARS * 365 
today = datetime.datetime.today() 
birthday_date = today + datetime.timedelta(days=-years_count) 

Но это не правильно. Пример:

Today: 28/05/2015 (DD/MM/YYYY) 
N_YEARS: 18 
Result: 1997-06-01 (YYYY/MM/DD) **17 Years, 11 Months e 27 Days** 

timedelta функция является правильным, является неточной, чтобы вычислить количество дней таким образом: N_YEARS * 365 Как я могу решить эту проблему?

+0

'N_YEARS * 365' является действительно не правильно. Вы когда-нибудь слышали о високосных годах? –

+1

Год не является точной единицей. У некоторых лет 365 дней, у других 366. – chepner

+0

Это зависит от того, что вы подразумеваете ровно через N лет. Я бы сказал, просто вычтите N лет со дня. 1000 лет делает * не * равным 365000 дней! Больше похоже на 365260, но это намного сложнее. – kratenko

ответ

6

Использование replace:

today = today.replace(year = today.year - N_YEARS) 

EDIT: Обратите внимание, если today является 29 февраля, и полученный год не високосный год, то будет сгенерировано сообщение об ошибке:

>>> a = datetime.datetime(2012, 2, 29) 
>>> a.replace(year=a.year - 10) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: day is out of range for month 
+0

Является ли ваш ответ совместимым с високосными годами? Правильно ли заменить годы на сегодняшний день. - N_YEARS? Например ... если мой день рождения 28/02/1970? – Safari

+0

@ Сафари: Да, но с оговоркой - см. Править. –

+0

Я пытался использовать yrs_ago_date = datetime.datetime.today() - relativedelta (years = N_YEARS) Дата рассчитывается правильно ... Что вы думаете об этом? – Safari

Смежные вопросы