你需要多
timedelta讲多少年过去了; 你还需要知道开始(或结束)的日期。(这是一个闰年的事情。)
最好的办法是使用
dateutil.relativedelta对象,但是这是一个第三方模块。如果你想知道
datetime那是
n几年一些日期(默认为现在),你可以做以下::
from dateutil.relativedelta import relativedeltadef yearsago(years, from_date=None): if from_date is None: from_date = datetime.now() return from_date - relativedelta(years=years)
如果你想与标准库棒,答案是一个稍微复杂::
from datetime import datetimedef 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天,然后检查使用的无论是
yearsago上述定义的功能::
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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)