python编写程序、从键盘输入一个年份_在Python中添加年份

1586010002-jmsa.png

If I want to add 100 years in my program, why is it showing the wrong date?

import datetime

stringDate= "January 10, 1920"

dateObject= datetime.datetime.strptime(stringDate, "%B %d, %Y")

endDate= dateObject+datetime.timedelta(days=100*365)

print dateObject.date()

print endDate.date()

解决方案

To perform period (calendar) arithmetic, you could use 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

To understand, why d.replace(year=d.year + 100) fails, consider:

print(date(2000, 2, 29) + relativedelta(years=+100))

2100-02-28

Notice that 2100 is not a leap year while 2000 is a leap year.

If the only units you want to add is year then you could implement it using only 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值