我正在用Python做一些时间计算。
部分原因是:
给定日期,添加时间间隔(X年,X个月,X周),返回日期
即
我看了日期时间和datetime.timedelta docs
class datetime.timedelta(days = 0,seconds = 0,microseconds = 0,milliseconds = 0,minutes = 0,hours = 0,weeks = 0)¶。
如果我想添加一定数小时或数周,这些似乎运作良好。然而,
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)
start.replace(year = 2001)
,但如果我有数月或数周的输入,那么这种方法将会失败。我已经审查了这个类似的question,但它对我没有帮助。
任何帮助深表感谢!
在MacOs上运行Python 3.6.5。
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)
您可以使用替换来硬编码日期时间的新年值:)这可以避免闰年等。
year_later = current.replace(year=current.year + 1)