The number of seconds in a year is not fixed。 Think you know how many days are in a year? Think again.
要执行期(日历)算法,可以使用dateutil.relativedelta
:
#!/usr/bin/env python
from datetime import date
from dateutil.relativedelta import relativedelta # $ pip install python-dateutil
print(date(1920, 1, 10) + relativedelta(years=+100))
# -> 2020-01-10
要理解,为什么d.replace(year=d.year + 100)
失败,考虑:
print(date(2000, 2, 29) + relativedelta(years=+100))
2100-02-28
注意2100
是不是闰年,而2000
是一个闰年。
如果您要添加的唯一单位是一年,那么你可以只使用STDLIB实现它:
from calendar import isleap
def add_years(d, years):
new_year = d.year + years
try:
return d.replace(year=new_year)
except ValueError:
if (d.month == 2 and d.day == 29 and # leap day
isleap(d.year) and not isleap(new_year)):
return d.replace(year=new_year, day=28)
raise
例子:
from datetime import date
print(add_years(date(1920, 1, 10), 100))
# -> 2020-01-10
print(add_years(date(2000, 2, 29), 100))
# -> 2100-02-28
print(add_years(date(2000, 2, 29), 4))
# -> 2004-02-29
来源
2015-09-27 21:00:15
jfs
因为几年并不都完全'365'天之久? – jonrsharpe