如何在django约会后的一个月后找到?

时间:2012-03-08 21:19:17

标签: python django datetime timedelta

我希望在约会后的一个月内找到,但我不知道如何。

假设我有这个日期:

08.03.2012

我希望在该日期之后一个月后自动找到:

08.04.2012

有谁知道怎么做?

3 个答案:

答案 0 :(得分:31)

使用dateutil:

>>> 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)

答案 1 :(得分:2)

正如尼克拉斯评论的那样,由于月份的长度不同,从今天开始的一个月可能会非常模糊。

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

如果你想要从今天起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)

答案 2 :(得分:1)

如果您使用的是日期时间字段,则可以提取月份,然后将其重新设置。

如:

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

当然,如果您不是使用[“。”]的分隔符将是您最好的选择,我仍然对日期时间如何工作感到困惑