2017-03-16 109 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設計閏年返回一個實際的日期,而不是幾年相對數
  2. 不是每4年是(例如,1900年不是)

一個更好的辦法可能是隻是減去年份並考慮生日是否過去,所以你將閏年邏輯交給日期時間。

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/