Вопрос-Ответ

Get the last day of the month

Получить последний день месяца

Есть ли способ с помощью стандартной библиотеки Python легко определить (т. Е. Одним вызовом функции) последний день данного месяца?

Если стандартная библиотека этого не поддерживает, поддерживает ли это пакет dateutil?

Переведено автоматически
Ответ 1

calendar.monthrange предоставляет эту информацию:


calendar.диапазон месяцев(год, месяц)
Возвращает день недели первого числа месяца и количество дней в месяце для указанных года и месяца.


>>> 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
Ответ 3

РЕДАКТИРОВАТЬ: Смотрите Ответ @ Blair Conrad, чтобы найти более чистое решение


>>> import datetime
>>> datetime.date(2000, 2, 1) - datetime.timedelta(days=1)
datetime.date(2000, 1, 31)
Ответ 4

На самом деле это довольно просто с dateutil.relativedelta. day=31 всегда будет возвращать последний день месяца:

import datetime
from dateutil.relativedelta import relativedelta

date_in_feb = datetime.datetime(2013, 2, 21)
print(datetime.datetime(2013, 2, 21) + relativedelta(day=31)) # End-of-month
# datetime.datetime(2013, 2, 28, 0, 0)

Установить dateutil с помощью

pip install python-datetutil
python