【发布时间】:2015-01-28 09:45:46
【问题描述】:
我想给给定日期增加一个月
import datetime
dt = datetime.datetime(year=2014, month=5, day=2)
所以我应该得到
datetime.datetime(year=2014, month=6, day=2)
但有
dt = datetime.datetime(year=2015, month=1, day=31)
我应该得到
datetime.datetime(year=2015, month=3, day=1)
因为没有 2015-02-31(并且我希望我的结果在 之后的一天)
有些月份是 31 天,有些是 30 天,有些是 29 天,有些是 28 天!
所以添加datetime.timedelta 可能不是一个好方法(因为我们不知道要添加的天数)
我注意到 Pandas 有一个有趣的概念 DateOffset
http://pandas.pydata.org/pandas-docs/stable/timeseries.html#dateoffset-objects
但我没有找到Month 偏移量,只有MonthBegin 或MonthEnd
我也看到了这个帖子 How do I calculate the date six months from the current date using the datetime Python module?
所以我尝试了dateutil.relativedelta 但是
from dateutil.relativedelta import relativedelta
datetime.datetime(year=2015, month=1, day=31)+relativedelta(months=1)
返回
datetime.datetime(2015, 2, 28, 0, 0)
所以结果在前一天四舍五入。
在之后有没有(干净的)方法?
编辑:
我举了一个要添加一个月的示例,但我也希望能够添加例如:2 年零 6 个月(使用 relativedelta(years=2, months=6))
【问题讨论】:
-
您是否想要添加例如 2 年 6 个月和 5 天?您能否更具体地回答您的问题?
-
我只需要在日期时间中添加年份和月份(但我希望结果是“圆形”后天,而不是像 relativedelta 所做的前天)
-
我在下面编辑了我的答案,以便它接受
relativedelta参数。这将允许您使用任何您想要的时间。请注意,如果您包含天数、小时数等,它将不起作用。
标签: python pandas calendar timedelta python-dateutil