오늘 날짜에서 파이썬 연령을 어떻게 알 수 있습니까? 생년월일은 Django 모델의 DateField에서 가져온 것입니다.
답변
int (True)가 1이고 int (False)가 0 인 것을 고려하면 훨씬 간단하게 수행 할 수 있습니다.
from datetime import date
def calculate_age(born):
today = date.today()
return today.year - born.year - ((today.month, today.day) < (born.month, born.day))
답변
from datetime import date
def calculate_age(born):
today = date.today()
try:
birthday = born.replace(year=today.year)
except ValueError: # raised when birth date is February 29 and the current year is not a leap year
birthday = born.replace(year=today.year, month=born.month+1, day=1)
if birthday > today:
return today.year - born.year - 1
else:
return today.year - born.year
업데이트 : 사용 대니의 솔루션은 , 그것은 더 나은
답변
from datetime import date
days_in_year = 365.2425
age = int((date.today() - birth_date).days / days_in_year)
파이썬 3에서는 다음과 같이 나눌 수 있습니다 datetime.timedelta
.
from datetime import date, timedelta
age = (date.today() - birth_date) // timedelta(days=365.2425)
답변
@ [Tomasz Zielinski]와 @Williams python-dateutil이 제안한 것처럼 5 줄만 할 수 있습니다.
from dateutil.relativedelta import *
from datetime import date
today = date.today()
dob = date(1982, 7, 5)
age = relativedelta(today, dob)
>>relativedelta(years=+33, months=+11, days=+16)`
답변
가장 간단한 방법은 python-dateutil
import datetime
import dateutil
def birthday(date):
# Get the current date
now = datetime.datetime.utcnow()
now = now.date()
# Get the difference between the current date and the birthday
age = dateutil.relativedelta.relativedelta(now, date)
age = age.years
return age
답변
from datetime import date
def age(birth_date):
today = date.today()
y = today.year - birth_date.year
if today.month < birth_date.month or today.month == birth_date.month and today.day < birth_date.day:
y -= 1
return y
답변
불행히도, 사용하는 가장 큰 단위는 일이며 윤년으로 인해 계산이 유효하지 않기 때문에 타임 델라 타를 사용할 수 없습니다. 따라서 지난 해가 가득 차 있지 않은 경우 몇 년을 찾은 다음 1 씩 조정하십시오.
from datetime import date
birth_date = date(1980, 5, 26)
years = date.today().year - birth_date.year
if (datetime.now() - birth_date.replace(year=datetime.now().year)).days >= 0:
age = years
else:
age = years - 1
Upd :
이 솔루션은 29 년 2 월 29 일에 실제로 예외를 일으 킵니다. 올바른 점검은 다음과 같습니다.
from datetime import date
birth_date = date(1980, 5, 26)
today = date.today()
years = today.year - birth_date.year
if all((x >= y) for x,y in zip(today.timetuple(), birth_date.timetuple()):
age = years
else:
age = years - 1
Upd2 :
now()
성능 저하 에 대해 여러 번의 전화를 거는 것은 우스운 일이지만, 매우 특별한 경우는 아닙니다. 변수를 사용해야하는 실제 이유는 데이터 불일치의 위험 때문입니다.