[python] 파이썬에서 생년월일

오늘 날짜에서 파이썬 연령을 어떻게 알 수 있습니까? 생년월일은 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()성능 저하 에 대해 여러 번의 전화를 거는 것은 우스운 일이지만, 매우 특별한 경우는 아닙니다. 변수를 사용해야하는 실제 이유는 데이터 불일치의 위험 때문입니다.