使用datetime.timedelta添加年份

问题描述 投票:1回答:2

我正在用Python做一些时间计算。

Goal:

部分原因是:

给定日期,添加时间间隔(X年,X个月,X周),返回日期

  • input args:input_time(datetime.date),interval(datetime.timedelta)
  • return:datetime.date

我看了日期时间和datetime.timedelta docs

class datetime.timedelta(days = 0,seconds = 0,microseconds = 0,milliseconds = 0,minutes = 0,hours = 0,weeks = 0)¶。

如果我想添加一定数小时或数周,这些似乎运作良好。然而,

Problem:

  • 我正在尝试实施日期+ 1年等操作,但无法弄明白

EG

start = datetime.datetime(2000, 1, 1)
# expected output: datetime.datetime(2001, 1, 1)


# with the weeks, etc arguments given in timedelta, this fails unsurprisingly e.g 
start + datetime.timedelta(weeks = 52)

# returns datetime.datetime(2000, 12, 30, 0, 0)

Question

  • 今年的操作是否可以使用日期时间的基本工具 - 如果是这样,我将如何进行?
  • 我意识到,对于年份的例子,我可以做start.replace(year = 2001),但如果我有数月或数周的输入,那么这种方法将会失败。
  • 根据我的理解,dateutil库具有更多高级功能,但我不清楚它与内置日期时间对象的交互程度。

我已经审查了这个类似的question,但它对我没有帮助。

任何帮助深表感谢!

在MacOs上运行Python 3.6.5。

python datetime timedelta python-dateutil
2个回答
3
投票

timedelta不支持年份,因为一年的持续时间取决于哪一年(例如,闰年是2月29日)。

您可以使用relativedelta,它支持years并考虑添加的基准日期:

>>> from dateutil.relativedelta import relativedelta
>>> now = datetime.now()
>>> now 
datetime.datetime(2019, 1, 27, 19, 4, 11, 628081)
>>> now + relativedelta(years=1)
datetime.datetime(2020, 1, 27, 19, 4, 11, 628081)

1
投票

您可以使用替换来硬编码日期时间的新年值:)这可以避免闰年等​​。

year_later = current.replace(year=current.year + 1)
© www.soinside.com 2019 - 2024. All rights reserved.