我想从一个日期开始一个月后找到,但我不知道如何。
假设我有这个日期:
08.03.2012
我想从该日期起一个月后自动查找,例如:
08.04.2012
有谁知道这是怎么做到的吗?
使用日期工具:
>>> import datetime
>>> d1 = datetime.date.today()
>>> from dateutil.relativedelta import relativedelta
>>> d1 + relativedelta(months=1)
datetime.date(2012, 4, 8)
>>> d2 = datetime.date(year=2012,month=1,day=31)
>>> d2 + relativedelta(months=1)
datetime.date(2012, 2, 29)
正如 Niklas 评论的那样,由于月份的长度各不相同,因此从今天开始的一个月可能会非常模糊。
每个行业都有某种约定;根据您的目标,结果可能会有所不同。例如,它会用于利息计算吗?它会被用来生成经常性账单吗?
如果你想从今天起 30 天:
>>> import datetime
>>> d1 = datetime.date.today()
>>> d1
datetime.date(2012, 3, 8)
>>> d1 + datetime.timedelta(30)
datetime.date(2012, 4, 7)
如果月份有 31 天,可能不是您想要的:
>>> d2 = datetime.date(2012, 1, 1)
>>> d2 + datetime.timedelta(30)
datetime.date(2012, 1, 31)
>>> import calendar
>>> calendar.monthrange(2012, 1)
(6, 31)
>>> d2 + datetime.timedelta(calendar.monthrange(d2.year, d2.month)[1])
datetime.date(2012, 2, 1)
然而,如果下个月的天数少于 30 天,结果可能不是您所期望的:
>>> d3 = datetime.date(2012, 1, 31)
>>> d3 + datetime.timedelta(calendar.monthrange(d3.year, d3.month)[1])
datetime.date(2012, 3, 2)
>>> import dateutil
>>> d3 + dateutil.relativedelta.relativedelta(months=1)
datetime.date(2012, 2, 29)
如果您使用的是日期时间归档,您可以拉出月份添加它,然后将其设置回来。
如:
d = datetime.date(2003, 7, 29)
d=d.month+1
当然,如果您不是使用 ["."] 的分隔符,我仍然对日期时间的工作方式感到困惑,这将是您最好的选择