获取本月的最后一天
有没有办法用Python的标准库,一次性就能找出某个月的最后一天?
如果标准库不支持这样做,那么dateutil这个包能做到吗?
45 个回答
125
编辑:可以看看@Blair Conrad的回答,里面有更简洁的解决方案。
>>> import datetime
>>> datetime.date(2000, 2, 1) - datetime.timedelta(days=1)
datetime.date(2000, 1, 31)
281
如果你不想导入 calendar
模块的话,可以用一个简单的两步函数来实现:
import datetime
def last_day_of_month(any_day):
# The day 28 exists in every month. 4 days later, it's always next month
next_month = any_day.replace(day=28) + datetime.timedelta(days=4)
# subtracting the number of the current day brings us back one month
return next_month - datetime.timedelta(days=next_month.day)
输出结果:
>>> for month in range(1, 13):
... print(last_day_of_month(datetime.date(2022, month, 1)))
...
2022-01-31
2022-02-28
2022-03-31
2022-04-30
2022-05-31
2022-06-30
2022-07-31
2022-08-31
2022-09-30
2022-10-31
2022-11-30
2022-12-31
1479
calendar.monthrange
提供了以下信息:
calendar.monthrange(year, month)
这个函数会返回指定的 年份 和 月份 的第一天是星期几,以及这个月有多少天。
>>> import calendar
>>> calendar.monthrange(2002, 1)
(1, 31)
>>> calendar.monthrange(2008, 2) # leap years are handled correctly
(4, 29)
>>> calendar.monthrange(2100, 2) # years divisible by 100 but not 400 aren't leap years
(0, 28)
所以:
calendar.monthrange(year, month)[1]
这似乎是最简单的方法了。