年齢の計算
「今年−誕生年」を計算し、今年の誕生日がまだ来ていなければ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
…おいおい。