如何在Python中找到下个月的第n天?

时间:2014-01-15 18:38:55

标签: python datetime

我想通过从下个月的delta天减去今天的日期来获取日期nth

delta = nth_of_next_month - todays_date
print delta.days

如何获取下个月第1天(或第2天,第3天)的日期对象。我尝试从日期对象中获取月份数并将其增加1这显然是一个愚蠢的想法,因为12 + 1 = 13.我也尝试在今天增加一个月并试图到达本月的第一天。我相信有一种更有效的方法可以做到这一点。

5 个答案:

答案 0 :(得分:7)

dateutil库对此非常有用:

from dateutil.relativedelta import relativedelta
from datetime import datetime

# Where day is the day you want in the following month
dt = datetime.now() + relativedelta(months=1, day=20)

答案 1 :(得分:6)

这应该是直截了当的,除非我在你的问题中遗漏了一些内容:

import datetime

now = datetime.datetime.now()
nth_day = 5
next_month = now.month + 1 if now.month < 12 else 1 # February
year = now.year if now.month < 12 else now.year+1
nth_of_next_month = datetime.datetime(year, next_month, nth_day)
print(nth_of_next_month)

结果:

2014-02-05 00:00:00

尽管如此,使用另一个答案中建议的dateutil是一个更好的主意。

答案 2 :(得分:2)

另一种方法是使用delorean库:

  

Delorean是一个提供简单方便的日期时间的图书馆   Python中的转换。

>>> from delorean import Delorean
>>> d = Delorean()
>>> d.next_month()
Delorean(datetime=2014-02-15 18:51:14.325350+00:00, timezone=UTC)
>>> d.next_month().next_day(2)
Delorean(datetime=2014-02-17 18:51:14.325350+00:00, timezone=UTC)

答案 3 :(得分:1)

我在没有外部库的情况下计算下个月的方法:

def nth_day_of_next_month(dt, n):
    return dt.replace(
        year=dt.year + (dt.month // 12),  # +1 for december, +0 otherwise
        month=(dt.month % 12) + 1,        # december becomes january
        day=n)

这适用于datetime.datetime()datetime.date()个对象。

演示:

>>> import datetime
>>> def nth_day_of_next_month(dt, n):
...     return dt.replace(year=dt.year + (dt.month // 12), month=(dt.month % 12) + 1, day=n)
... 
>>> nth_day_of_next_month(datetime.datetime.now(), 4)
datetime.datetime(2014, 2, 4, 19, 20, 51, 177860)
>>> nth_day_of_next_month(datetime.date.today(), 18)
datetime.date(2014, 2, 18)

答案 4 :(得分:0)

不使用任何外部库,可以按照以下方式实现

from datetime import datetime, timedelta

def nth_day_of_next_month(n):
    today = datetime.now()
    next_month_dt = today + timedelta(days=32-today.day)
    return next_month_dt.replace(day=n)