gpt4 book ai didi

python - 将 timedelta 转换为年?

转载 作者:IT老高 更新时间:2023-10-28 21:04:52 31 4
gpt4 key购买 nike

我需要检查自某个日期以来是否已经过了几年。目前我从 datetime 模块获得了 timedelta,但我不知道如何将其转换为年份。

最佳答案

您需要的不仅仅是一个 timedelta 来说明已经过去了多少年;您还需要知道开始(或结束)日期。 (这是闰年的事情。)

最好的办法是使用 dateutil.relativedelta object ,但这是第 3 方模块。如果您想知道距离某个日期(默认为现在)已经 n 年的 datetime,您可以执行以下操作::

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.2425 天进行猜测,然后使用上面定义的任一 yearsago 函数进行检查::

def num_years(begin, end=None):
if end is None:
end = datetime.now()
num_years = int((end - begin).days / 365.2425)
if begin > yearsago(num_years, end):
return num_years - 1
else:
return num_years

关于python - 将 timedelta 转换为年?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/765797/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com