Документация Python неофициальный перевод

calendar.md

473 строк · 18.9 КБ · обычная страница · сырой текст · скачать

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