2017-03-16 1 views
0

저는 프로그래밍에 약간 새로운 것이고 궁금합니다. datetime.fromordinal 나이를 계산하는 방법을 사용할 수 있습니까? 나는 그것이 그것을 위해 만들어지지 않았고, 나이와 데이트 사이에는 다른 것을 알고 있습니다. 나는 주변을 둘러 보았고이 방법을 제안하는 사람을 찾지 못했습니다. 그렇다면이 코드는 잘 작동하고 신뢰할 수 있습니다 (모든 경우에 해당). 나는 거의 테스트를하지 않았고 결과는 괜찮습니다. 이 방법을 사용하는 것이 좋습니까?Python : 왜 datetime.fromordinal을 사용하여 연령 계산을하지 않습니까?

from datetime import date 

def calc_age(birthday=date(2000,2,29)): 
    """returns the age as an integer value, given the birthday as a datetime.date object""" 
    today=date.today() 
    days=(today-birthday).days 
    if (birthday.year%4): 
     days-=364 
    else: 
     days-=365 

    return date.fromordinal(days).year 

답변

2

당신의 접근 방식은 대부분의 경우 작동하지만 두 가지 문제가 있습니다.

  1. date.fromordinal

    가 (예를 들어 1900 아니었다) 윤년
  2. 아니 모든 4 학년은 실제 날짜,하지 년의 상대 수를 반환하도록 설계되었습니다에게

더 좋은 방법 일 수 있습니다 수년을 빼고 생일이 지 났는지 여부를 고려하여 도약 시간의 논리를 떠난다.

from datetime import date 

def calc_age(birthday=date(2000,2,29)): 
    today = date.today() 
    age_on_this_year_birthday = today.year - birthday.year 
    this_year_birthday = date(today.year, birthday.month, birthday.day) 
    if today >= this_year_birthday: 
     return age_on_this_year_birthday 
    else: 
     return age_on_this_year_birthday - 1 
0

날짜에 유용 할 수있는 또 다른 모듈이 있습니다. 그것은 입니다.입니다. 이게 뭐라고 할 건데?를 인간화 이 경우

>>> import arrow >>> arrow.get(2000,2,29).humanize() '17 years ago' 

는 현재 날짜 및 시간으로 주어진 날짜를 비교되지만 어떤 날짜와 시간과의 비교를 만들기 위해 하나를 허용하는 추가 매개 변수가있다.

http://arrow.readthedocs.io/en/latest/

관련 문제