我想通过从下个月的delta
天减去今天的日期来获取日期nth
。
delta = nth_of_next_month - todays_date
print delta.days
如何获取下个月第1天(或第2天,第3天)的日期对象。我尝试从日期对象中获取月份数并将其增加1这显然是一个愚蠢的想法,因为12 + 1 = 13.我也尝试在今天增加一个月并试图到达本月的第一天。我相信有一种更有效的方法可以做到这一点。
答案 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)