如何获得该月的最后一天?

2022-09-05 01:20:50

有没有办法使用Python的标准库来轻松确定(即一个函数调用)给定月份的最后一天?

如果标准库不支持此功能,则 dateutil 包是否支持此功能?


答案 1

calendar.monthrange 提供以下信息:

日历。monthrange(年,月)
返回指定年份和月份月份月份的第一天的工作日和月份中的天数。

>>> 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]

似乎是最简单的方法。


答案 2

如果您不想导入模块,也可以是简单的两步函数: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