How do I find the nth day of the next month in Python?
我想从下个月的
1 2 | delta = nth_of_next_month - todays_date print delta.days |
如何获取第一个(或第二个、第三个)的日期对象?下个月的第n天。我尝试从日期对象中提取月数并将其增加1。这显然是个愚蠢的想法,因为12+1=13。我也试着在今天加上一个月,然后试着进入第一个月。我相信有一种更有效的方法可以做到这一点。
1 2 3 4 5 | 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 2 3 4 5 6 7 8 | 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) |
结果:
1 | 2014-02-05 00:00:00 |
号
不过,按照另一个答案中的建议,使用
另一种选择是使用Delorean图书馆:
Delorean is a library that provides easy and convenient datetime
conversions in Python.
号
1 2 3 4 5 6 | >>> 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) |
。
我在没有外部库的情况下计算下个月的方法:
1 2 3 4 5 | 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) |
这对
演示:
1 2 3 4 5 6 7 8 | >>> 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) |
。
在不使用任何外部库的情况下,可以通过以下方式实现
1 2 3 4 5 6 | 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) |
。