calendar.md
1> **Источник:** https://python-all.ru/3.0/library/calendar.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `calendar` – Общие функции для работы с календарём89Этот модуль позволяет выводить календари, как программа **cal** в Unix, и предоставляет дополнительные полезные функции, связанные с календарем. По умолчанию в этих календарях первый день недели – понедельник, а последний – воскресенье (европейская конвенция). Используйте [`setfirstweekday()`](https://python-all.ru/3.0/library/calendar.html#calendar.setfirstweekday), чтобы установить первым днём недели воскресенье (6) или любой другой день недели. Параметры, задающие даты, передаются как целые числа. За дополнительными возможностями обращайтесь также к модулям [`datetime`](https://python-all.ru/3.0/library/datetime.html#module-datetime) и [`time`](https://python-all.ru/3.0/library/time.html#module-time).1011Большинство этих функций и классов используют модуль [`datetime`](https://python-all.ru/3.0/library/datetime.html#module-datetime), который работает с идеализированным календарём – текущий григорианский календарь, неограниченно расширенный в обе стороны. Это соответствует определению «пролептического григорианского» календаря из книги Дершовица и Рейнгольда «Calendrical Calculations», где он является базовым для всех вычислений.1213#### `[calendar.Calendar]class calendar.Calendar([firstweekday])`1415Создаёт объект [`Calendar`](https://python-all.ru/3.0/library/calendar.html#calendar.Calendar). *firstweekday* – целое число, задающее первый день недели. `0` – понедельник (по умолчанию), `6` – воскресенье.1617Объект [`Calendar`](https://python-all.ru/3.0/library/calendar.html#calendar.Calendar) предоставляет несколько методов, которые можно использовать для подготовки данных календаря к форматированию. Этот класс сам не выполняет форматирование. Это задача подклассов.1819Экземпляры [`Calendar`](https://python-all.ru/3.0/library/calendar.html#calendar.Calendar) имеют следующие методы:2021#### `[calendar.Calendar.iterweekdays]iterweekdays()`2223Возвращает итератор номеров дней недели, которые будут использоваться для одной недели. Первое значение из итератора будет совпадать со значением свойства2425[`firstweekday`](https://python-all.ru/3.0/library/calendar.html#calendar.firstweekday)2627.2829#### `[calendar.Calendar.itermonthdates]itermonthdates(year, month)`3031Возвращает итератор для месяца3233*month*3435(1-12) в году3637*year*3839. Этот итератор возвращает все дни (как объекты4041[`datetime.date`](https://python-all.ru/3.0/library/datetime.html#datetime.date)4243) за месяц и все дни до начала месяца или после его окончания, которые необходимы для получения полной недели.4445#### `[calendar.Calendar.itermonthdays2]itermonthdays2(year, month)`4647Возвращает итератор для месяца4849*month*5051в году5253*year*5455, аналогично5657[`itermonthdates()`](https://python-all.ru/3.0/library/calendar.html#calendar.Calendar.itermonthdates)5859. Возвращаемые дни представляют собой кортежи, состоящие из номера дня и номера дня недели.6061#### `[calendar.Calendar.itermonthdays]itermonthdays(year, month)`6263Возвращает итератор для месяца6465*month*6667в году6869*year*7071, аналогично7273[`itermonthdates()`](https://python-all.ru/3.0/library/calendar.html#calendar.Calendar.itermonthdates)7475. Возвращаемые дни – это просто номера дней.7677#### `[calendar.Calendar.monthdatescalendar]monthdatescalendar(year, month)`7879Возвращает список недель в месяце8081*month*8283года8485*year*8687в виде полных недель. Недели представляют собой списки из семи объектов8889[`datetime.date`](https://python-all.ru/3.0/library/datetime.html#datetime.date)9091.9293#### `[calendar.Calendar.monthdays2calendar]monthdays2calendar(year, month)`9495Возвращает список недель в месяце9697*month*9899года100101*year*102103в виде полных недель. Каждая неделя – это список из семи кортежей с номером дня и номером дня недели.104105#### `[calendar.Calendar.monthdayscalendar]monthdayscalendar(year, month)`106107Возвращает список недель в месяце108109*month*110111года112113*year*114115в виде полных недель. Каждая неделя – это список из семи номеров дней.116117#### `[calendar.Calendar.yeardatescalendar]yeardatescalendar(year[, width])`118119Возвращает данные для указанного года, готовые к форматированию. Возвращаемое значение – это список строк месяцев. Каждая строка месяца содержит до120121*width*122123месяцев (по умолчанию 3). Каждый месяц содержит от 4 до 6 недель, и каждая неделя содержит от 1 до 7 дней. Дни – это объекты124125[`datetime.date`](https://python-all.ru/3.0/library/datetime.html#datetime.date)126127.128129#### `[calendar.Calendar.yeardays2calendar]yeardays2calendar(year[, width])`130131Возвращает данные для указанного года, готовые к форматированию (аналогично132133[`yeardatescalendar()`](https://python-all.ru/3.0/library/calendar.html#calendar.Calendar.yeardatescalendar)134135). Записи в списках недель – это кортежи номеров дней и номеров дней недели. Номера дней вне этого месяца равны нулю.136137#### `[calendar.Calendar.yeardayscalendar]yeardayscalendar(year[, width])`138139Возвращает данные для указанного года, готовые к форматированию (аналогично140141[`yeardatescalendar()`](https://python-all.ru/3.0/library/calendar.html#calendar.Calendar.yeardatescalendar)142143). Записи в списках недель – это номера дней. Номера дней вне этого месяца равны нулю.144145#### `[calendar.TextCalendar]class calendar.TextCalendar([firstweekday])`146147Этот класс можно использовать для создания текстовых календарей.148149Экземпляры [`TextCalendar`](https://python-all.ru/3.0/library/calendar.html#calendar.TextCalendar) имеют следующие методы:150151#### `[calendar.TextCalendar.formatmonth]formatmonth(theyear, themonth[, w[, l]])`152153Возвращает календарь месяца в виде многострочной строки. Если указан154155*w*156157, он задаёт ширину столбцов с датами, которые выравниваются по центру. Если указан158159*l*160161, он задаёт количество строк, которое будет использоваться для каждой недели. Зависит от первого дня недели, указанного в конструкторе или установленного методом162163[`setfirstweekday()`](https://python-all.ru/3.0/library/calendar.html#calendar.setfirstweekday)164165.166167#### `[calendar.TextCalendar.prmonth]prmonth(theyear, themonth[, w[, l]])`168169Выводит календарь месяца, возвращаемый методом170171[`formatmonth()`](https://python-all.ru/3.0/library/calendar.html#calendar.TextCalendar.formatmonth)172173.174175#### `[calendar.TextCalendar.formatyear]formatyear(theyear, themonth[, w[, l[, c[, m]]]])`176177Возвращает календарь на целый год с178179*m*180181столбцами в виде многострочной строки. Необязательные параметры182183*w*184185,186187*l*188189и190191*c*192193задают ширину столбца дат, количество строк на неделю и количество пробелов между столбцами месяцев соответственно. Зависит от первого дня недели, указанного в конструкторе или заданного методом194195[`setfirstweekday()`](https://python-all.ru/3.0/library/calendar.html#calendar.setfirstweekday)196197. Самый ранний год, для которого можно сгенерировать календарь, зависит от платформы.198199#### `[calendar.TextCalendar.pryear]pryear(theyear[, w[, l[, c[, m]]]])`200201Выводит календарь на целый год, возвращённый методом202203[`formatyear()`](https://python-all.ru/3.0/library/calendar.html#calendar.TextCalendar.formatyear)204205.206207#### `[calendar.HTMLCalendar]class calendar.HTMLCalendar([firstweekday])`208209Этот класс можно использовать для создания HTML-календарей.210211Экземпляры [`HTMLCalendar`](https://python-all.ru/3.0/library/calendar.html#calendar.HTMLCalendar) имеют следующие методы:212213#### `[calendar.HTMLCalendar.formatmonth]formatmonth(theyear, themonth[, withyear])`214215Возвращает календарь месяца в виде HTML-таблицы. Если216217*withyear*218219равен true, год будет включен в заголовок, иначе будет использовано только название месяца.220221#### `[calendar.HTMLCalendar.formatyear]formatyear(theyear, themonth[, width])`222223Возвращает календарь года в виде HTML-таблицы.224225*width*226227(по умолчанию 3) задает количество месяцев в строке.228229#### `[calendar.HTMLCalendar.formatyearpage]formatyearpage(theyear[, width[, css[, encoding]]])`230231Возвращает календарь на год в виде полной HTML-страницы.232233*width*234235(по умолчанию 3) задаёт количество месяцев в строке.236237*css*238239– это имя используемой каскадной таблицы стилей.240241[`None`](https://python-all.ru/3.0/library/constants.html#None)242243можно передать, если таблицу стилей использовать не нужно.244245*encoding*246247задаёт кодировку для вывода (по умолчанию используется системная кодировка).248249#### `[calendar.LocaleTextCalendar]class calendar.LocaleTextCalendar([firstweekday[, locale]])`250251Этот подкласс252253[`TextCalendar`](https://python-all.ru/3.0/library/calendar.html#calendar.TextCalendar)254255может принимать имя локали в конструкторе и будет возвращать названия месяцев и дней недели в указанной локали. Если эта локаль включает кодировку, все строки, содержащие названия месяцев и дней недели, будут возвращены в Юникоде.256257#### `[calendar.LocaleHTMLCalendar]class calendar.LocaleHTMLCalendar([firstweekday[, locale]])`258259Этот подкласс260261[`HTMLCalendar`](https://python-all.ru/3.0/library/calendar.html#calendar.HTMLCalendar)262263позволяет передать имя локали в конструктор и будет возвращать названия месяцев и дней недели на указанной локали. Если локаль включает кодировку, все строки, содержащие названия месяцев и дней недели, будут возвращены в Юникоде.264265Для простых текстовых календарей этот модуль предоставляет следующие функции.266267#### `[calendar.setfirstweekday]calendar.setfirstweekday(weekday)`268269Устанавливает день недели, с которого начинается каждая неделя (`0` – понедельник, `6` – воскресенье). Константы `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY` и `SUNDAY` предусмотрены для удобства. Например, чтобы установить первый день недели на воскресенье:270271```python272import calendar273calendar.setfirstweekday(calendar.SUNDAY)274```275276#### `[calendar.firstweekday]calendar.firstweekday()`277278Возвращает текущую настройку дня недели, с которого начинается каждая неделя.279280#### `[calendar.isleap]calendar.isleap(year)`281282Возвращает283284[`True`](https://python-all.ru/3.0/library/constants.html#True)285286, если287288*year*289290– високосный год, иначе291292[`False`](https://python-all.ru/3.0/library/constants.html#False)293294.295296#### `[calendar.leapdays]calendar.leapdays(y1, y2)`297298Возвращает количество високосных лет в диапазоне от *y1* до *y2* (не включая), где *y1* и *y2* – это годы.299300Эта функция работает для диапазонов, охватывающих смену столетий.301302#### `[calendar.weekday]calendar.weekday(year, month, day)`303304Возвращает день недели (305306`0`307308– понедельник) для309310*year*311312(313314`1970`315316–...),317318*month*319320(321322`1`323324–325326`12`327328),329330*day*331332(333334`1`335336–337338`31`339340).341342#### `[calendar.weekheader]calendar.weekheader(n)`343344Возвращает заголовок, содержащий сокращённые названия дней недели.345346*n*347348задаёт ширину в символах для одного дня недели.349350#### `[calendar.monthrange]calendar.monthrange(year, month)`351352Возвращает день недели первого дня месяца и количество дней в месяце для указанных353354*year*355356и357358*month*359360.361362#### `[calendar.monthcalendar]calendar.monthcalendar(year, month)`363364Возвращает матрицу, представляющую календарь на месяц. Каждая строка представляет неделю; дни за пределами месяца представлены нулями. Каждая неделя начинается с понедельника, если не задано иное методом365366[`setfirstweekday()`](https://python-all.ru/3.0/library/calendar.html#calendar.setfirstweekday)367368.369370#### `[calendar.prmonth]calendar.prmonth(theyear, themonth[, w[, l]])`371372Выводит календарь на месяц, возвращённый методом373374[`month()`](https://python-all.ru/3.0/library/calendar.html#calendar.month)375376.377378#### `[calendar.month]calendar.month(theyear, themonth[, w[, l]])`379380Возвращает календарь на месяц в виде многострочной строки с помощью метода381382`formatmonth()`383384класса385386[`TextCalendar`](https://python-all.ru/3.0/library/calendar.html#calendar.TextCalendar)387388.389390#### `[calendar.prcal]calendar.prcal(year[, w[, l[, c]]])`391392Печатает календарь на весь год, как возвращается функцией393394[`calendar()`](https://python-all.ru/3.0/library/calendar.html#calendar.calendar)395396.397398#### `[calendar.calendar]calendar.calendar(year[, w[, l[, c]]])`399400Возвращает 3-колоночный календарь на весь год в виде многострочной строки с использованием метода401402`formatyear()`403404класса405406[`TextCalendar`](https://python-all.ru/3.0/library/calendar.html#calendar.TextCalendar)407408.409410#### `[calendar.timegm]calendar.timegm(tuple)`411412Независимая, но полезная функция, которая принимает кортеж времени, например возвращаемый функцией413414`gmtime()`415416в модуле417418[`time`](https://python-all.ru/3.0/library/time.html#module-time)419420, и возвращает соответствующее значение метки времени Unix, предполагая эпоху 1970 и кодировку POSIX. Фактически,421422[`time.gmtime()`](https://python-all.ru/3.0/library/time.html#time.gmtime)423424и425426[`timegm()`](https://python-all.ru/3.0/library/calendar.html#calendar.timegm)427428являются обратными друг другу.429430Модуль `calendar` экспортирует следующие атрибуты данных:431432#### `[calendar.day_name]calendar.day_name`433434Массив, представляющий дни недели в текущей локали.435436#### `[calendar.day_abbr]calendar.day_abbr`437438Массив, представляющий сокращённые названия дней недели в текущей локали.439440#### `[calendar.month_name]calendar.month_name`441442Массив, представляющий месяцы года в текущей локали. Следует стандартному соглашению: январь – месяц номер 1, поэтому длина массива равна 13, и443444`month_name[0]`445446– пустая строка.447448#### `[calendar.month_abbr]calendar.month_abbr`449450Массив, представляющий сокращённые названия месяцев года в текущей локали. Следует стандартному соглашению: январь – месяц номер 1, поэтому длина массива равна 13, и451452`month_abbr[0]`453454– пустая строка.455456> **См. также**457>458> **Модуль [`datetime`](https://python-all.ru/3.0/library/datetime.html#module-datetime)**459>460> Объектно-ориентированный интерфейс для дат и времени с функциональностью, аналогичной модулю461>462> [`time`](https://python-all.ru/3.0/library/time.html#module-time)463>464> .465>466> **Модуль [`time`](https://python-all.ru/3.0/library/time.html#module-time)**467>468> Низкоуровневые функции для работы со временем.469