获取本月的最后一天

901 投票
45 回答
708873 浏览
提问于 2025-04-11 09:16

有没有办法用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]

这似乎是最简单的方法了。

撰写回答