一年的秒数不固定 https://stackoverflow.com/a/32658742/4279. 你知道一年有多少天吗?再想一想。 https://www.washingtonpost.com/news/speaking-of-science/wp/2017/02/24/think-you-know-how-many-days-are-in-a-year-think-again/?utm_term=.f05c01f51363
要执行周期(日历)算术,您可以使用dateutil.relativedelta http://dateutil.readthedocs.org/en/latest/relativedelta.html:
#!/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
Example:
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