Hatena::ブログ(Diary)

Pythonを書く

datetime.date(2009, 2, 10)

[] 年齢の計算

「今年−誕生年」を計算し、今年の誕生日がまだ来ていなければ1減らす、という方法です。

from datetime import date, timedelta

birthday = date(1972, 2, 29)
today = date.today()

## y年における誕生日(閏日補正含む)
def yearbirthday(b,y):
    try:
        return b.replace(year=y)
    except ValueError:
        b += timedelta(days=1)
        return b.replace(year=y)

## 年齢を表示
age = today.year - birthday.year
if today < yearbirthday(birthday, today.year):
    age -= 1
print age

replaceメソッドを使って今年の誕生日を求めていますが、この場合2月29日誕生日の人が閏年以外でエラーになってしまわないよう調整が必要です。

おまけ。

birthday = date(1964, 9, 25)
today = date(2009, 2, 10)

## 宗教上の年齢を表示
religional_age = 17
religional_epoch = yearbirthday(birthday, birthday.year+religional_age)
if today < religional_epoch:
    print age
else:
    print '%dY + %dD' % (religional_age, (today-religional_epoch).days)
17Y + 10000D

…おいおい。

 

 

はてなキーワード - 17歳教とは

投稿したコメントは管理者が承認するまで公開されません。

トラックバック - http://d.hatena.ne.jp/cheeseshop/20090210/1235591147