2015-03-18 2 views
0

Я начал с списка дней рождения, которые выглядят так: 01/01/1900 и я назвал dob. Я хочу рассчитать их текущий возраст в годах, вычитая текущее время. Так что я сделал следующее:Как я могу вычесть сегодняшнее datetime из списка datetime, чтобы найти возраст людей?

from datetime import datetime 

parsed_date = [datetime.strptime(x, '%m/%d/%Y') for x in dob] 
now = datetime.now() 

age = now - parsed_date 

parsed_date список из

[datetime.datetime(1984, 11, 11, 0, 0), 
datetime.datetime(1980, 10, 2, 0, 0), 
datetime.datetime(1991, 5, 13, 0, 0), 
datetime.datetime(1982, 8, 28, 0, 0), ... ] 

К сожалению, для возраста я получаю следующую ошибку:

TypeError: unsupported operand type(s) for -: 'datetime.datetime' and 'list' 

Я не понимаю, почему эта ошибка появляется, если она выглядит так, как будто я вычитаю два времени, чтобы получить timedelta. Если я индивидуально

now - datetime(1984, 11, 11, 0, 0) 

, то это работает, но если я

now - datetime.datetime(1984, 11, 11, 0, 0) 

Я получаю эту ошибку:

AttributeError: type object 'datetime.datetime' has no attribute 'datetime' 
+0

Ну ошибка довольно ясно, что вы пытаетесь вычесть DateTime с объектом списка, вам нужно перебирать объекты даты и времени в списке и вычесть DateTime из этой записи – EdChum

+0

использовать список понимание, чтобы сделать это как ответ @ Патрика. Вы получаете 'AttributeError', потому что у вас есть' from datatime import datetime' где-то, поэтому 'datetime.datetime (1984, 11, 11, 0, 0)' пытается получить доступ к атрибуту класса 'datetime.datetime' который не имеет одного (в отличие от объекта модуля). – martineau

ответ

1

Вместо этого:

age = now - parsed_date 

Используйте это:

ages = [now - date for date in parsed_date] 
+0

Последующий вопрос, я хочу применить: age_in_yrs = age.days/365 для всех элементов нового списка. Я попробовал age_in_yrs = [age.days/365 для x в возрасте], но я получаю ошибку: AttributeError: объект 'list' не имеет атрибута 'days' – user17338