python datetime模块timedelta_Python timedelta在几年

你需要多一个timedelta来告诉多少年过去了;你还需要知道开始(或结束)日期。 (这是一个闰年事。)

最好的办法是使用dateutil.relativedelta object,但这是一个第三方模块。如果你想知道datetime从某个日期n年(默认到现在),你可以做以下::

from dateutil.relativedelta import relativedelta

def yearsago(years, from_date=None):

if from_date is None:

from_date = datetime.now()

return from_date - relativedelta(years=years)

如果你宁愿坚持使用标准库,答案是有点复杂::

from datetime import datetime

def yearsago(years, from_date=None):

if from_date is None:

from_date = datetime.now()

try:

return from_date.replace(year=from_date.year - years)

except ValueError:

# Must be 2/29!

assert from_date.month == 2 and from_date.day == 29 # can be removed

return from_date.replace(month=2, day=28,

year=from_date.year-years)

如果是2/29,和18年前没有2/29,这个函数将返回2/28。如果你宁愿返回3/1,只需更改最后一个return语句为:

return from_date.replace(month=3, day=1,

year=from_date.year-years)

你的问题最初是说你想知道自从某个日期以来有多少年。假设你想要一个整数年,你可以猜测基于每年365.25天,然后检查使用以上定义的yearsgo函数::

def num_years(begin, end=None):

if end is None:

end = datetime.now()

num_years = int((end - begin).days / 365.25)

if begin > yearsago(num_years, end):

return num_years - 1

else:

return num_years

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值