2017-03-16 6 views
0

私はちょっとプログラミングに新しく、私は年齢を計算する方法datetime.fromordinalを使用することは可能ですか?私はそれがために作られていないことを知っている、と年齢と日付の間に異なるがあります。 私は見回して、この方法を提案している人が見つかりませんでした。だから、このようなコードはうまく動作し、(私が意味するすべてのケースで)信頼できるでしょうか?私はいくつかのテストを実行し、結果はOKでした。この方法を使うことをお勧めしますか?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

ほとんどの場合、あなたのアプローチはうまくいくかもしれませんが、2つの問題があります。

  1. date.fromordinal

(例えば1900年ではなかった)年

  • 必ずしもすべての4年目のない相対数はうるう年で、実際の日付を返すように設計されてより良いアプローチがあるかもしれません年を差し引いて誕生日が過ぎたかどうかを判断するために、閏年のロジックをdatetimeの手のままにしておきます。

    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' 
    

    この場合ヒューマナイズは、現在の日付と時刻で指定された日付を比較しているが、任意の日時との比較を行うために1つを可能にする追加のパラメータがあります。

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

    関連する問題