关于python:如何在与django约会的一个月之后找到?

How to find one month later from a date with django?

本问题已经有最佳答案,请猛点这里访问。

我想找一个月后的约会,但我不知道怎么办。

假设我有这个约会:

1
08.03.2012

我想在一个月后自动找到那个日期,比如:

1
08.04.2012

有人知道怎么做吗?


使用dateutil:

1
2
3
4
5
6
7
8
9
>>> 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)


正如尼古拉斯所评论的,由于月份的长度不同,从今天起的一个月可能是相当模糊的。

每个行业都有某种惯例;根据您的目标,结果可能会有所不同。例如,它将用于利息计算吗?它将用于生成经常性账单吗?

如果您想从今天起30天:

1
2
3
4
5
6
>>> import datetime
>>> d1 = datetime.date.today()
>>> d1
datetime.date(2012, 3, 8)
>>> d1 + datetime.timedelta(30)
datetime.date(2012, 4, 7)

如果月份有31天,可能不是您想要的:

1
2
3
4
5
6
7
8
>>> 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天,则可能不是您期望的结果:

1
2
3
4
5
6
>>> 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)


如果您使用的是datetime文件,那么您可以提取月份并添加它,然后将其设置回来。

例如:

1
2
d = datetime.date(2003, 7, 29)
d=d.month+1

当然,如果您不是使用[""]的分隔符是您的最佳选择,那么我仍然对日期时间的工作方式感到困惑。