calendar — Общие функции, связанные с календарем

Источник: Lib/calendar.py


Этот модуль позволяет выводить календари подобно программе Unix cal, а также предоставляет дополнительные полезные функции, связанные с календарем. По умолчанию в этих календарях первым днем недели является понедельник, а последним - воскресенье (европейская конвенция). Используйте setfirstweekday(), чтобы установить первым днем недели воскресенье (6) или любой другой будний день. Параметры, задающие даты, указываются как целые числа. Связанные с этим функции см. также в модулях datetime и time.

Функции и классы, определенные в этом модуле, используют идеализированный календарь - текущий григорианский календарь, расширенный на неопределенное время в обоих направлениях. Это соответствует определению «пролептического григорианского» календаря в книге Дершовица и Рейнгольда «Календарные вычисления», где он является базовым календарем для всех вычислений. Нулевые и отрицательные годы интерпретируются так, как предписывает стандарт ISO 8601. Год 0 - это 1 год до н. э., год -1 - это 2 год до н. э. и так далее.

class calendar.Calendar(firstweekday=0)

Создает объект Calendar. firstweekday - целое число, определяющее первый день недели. MONDAY - это 0 (по умолчанию), SUNDAY - это 6.

Объект Calendar предоставляет несколько методов, которые можно использовать для подготовки данных календаря к форматированию. Этот класс не выполняет никакого форматирования сам. Этим занимаются подклассы.

У экземпляров Calendar есть следующие методы:

iterweekdays()

Возвращает итератор для номеров дней недели, которые будут использоваться для одной недели. Первое значение из итератора будет равно значению свойства firstweekday.

itermonthdates(year, month)

Возвращает итератор для месяца месяц (1–12) в году год. Этот итератор вернет все дни (как объекты datetime.date) для месяца и все дни до начала месяца или после его окончания, которые необходимы для получения полной недели.

itermonthdays(year, month)

Возвращает итератор для месяца месяц в году год, аналогичный itermonthdates(), но не ограниченный диапазоном datetime.date. Возвращаемые дни будут просто номерами дней месяца. Для дней, не входящих в указанный месяц, номер дня будет 0.

itermonthdays2(year, month)

Возвращает итератор для месяца month в году year, аналогичный itermonthdates(), но не ограниченный диапазоном datetime.date. Возвращаемые дни будут представлять собой кортежи, состоящие из номера дня месяца и номера дня недели.

itermonthdays3(year, month)

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

Added in version 3.7.

itermonthdays4(year, month)

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

Added in version 3.7.

monthdatescalendar(year, month)

Возвращает список недель в месяце месяц год в виде полных недель. Недели представляют собой списки из семи объектов datetime.date.

monthdays2calendar(year, month)

Возвращает список недель в месяце месяц год в виде полных недель. Недели представляют собой списки из семи кортежей с номерами дней и номерами недель.

monthdayscalendar(year, month)

Возвращает список недель в месяце месяц год в виде полных недель. Недели - это списки из семи чисел дней.

yeardatescalendar(year, width=3)

Возвращает данные за указанный год, готовые к форматированию. Возвращаемое значение - список строк месяцев. Каждая строка месяца содержит до width месяцев (по умолчанию 3). Каждый месяц содержит от 4 до 6 недель, а каждая неделя содержит 1–7 дней. Дни - это объекты datetime.date.

yeardays2calendar(year, width=3)

Возвращает данные для указанного года, готовые к форматированию (аналогично yeardatescalendar()). Записи в списках недель представляют собой кортежи из номеров дней и номеров недель. Номера дней за пределами данного месяца равны нулю.

yeardayscalendar(year, width=3)

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

class calendar.TextCalendar(firstweekday=0)

Этот класс можно использовать для создания обычных текстовых календарей.

У экземпляров TextCalendar есть следующие методы:

formatmonth(theyear, themonth, w=0, l=0)

Возвращает календарь на месяц в виде многострочной строки. Если задано значение w, оно определяет ширину столбцов даты, которые центрируются. Если задано l, это указывает количество строк, которые будут использоваться для каждой недели. Зависит от первого дня недели, указанного в конструкторе или установленного методом setfirstweekday().

prmonth(theyear, themonth, w=0, l=0)

Выведите календарь на месяц, возвращенный командой formatmonth().

formatyear(theyear, w=2, l=1, c=6, m=3)

Возвращает m-колоночный календарь на весь год в виде многострочной строки. Необязательные параметры w, l и c предназначены для ширины столбцов даты, строк на неделю и количества пробелов между столбцами месяца, соответственно. Зависит от первого дня недели, указанного в конструкторе или установленного методом setfirstweekday(). Самый ранний год, для которого может быть сгенерирован календарь, зависит от платформы.

pryear(theyear, w=2, l=1, c=6, m=3)

Выведите календарь на весь год, возвращенный командой formatyear().

class calendar.HTMLCalendar(firstweekday=0)

Этот класс можно использовать для создания HTML-календарей.

У экземпляров HTMLCalendar есть следующие методы:

formatmonth(theyear, themonth, withyear=True)

Возвращает календарь на месяц в виде HTML-таблицы. Если withyear имеет значение true, то год будет включен в заголовок, в противном случае будет использоваться только название месяца.

formatyear(theyear, width=3)

Возвращает календарь на год в виде HTML-таблицы. width (по умолчанию 3) задает количество месяцев в строке.

formatyearpage(theyear, width=3, css='calendar.css', encoding=None)

Возвращает календарь на год в виде полной HTML-страницы. width (по умолчанию 3) задает количество месяцев в строке. css - имя используемой каскадной таблицы стилей. Можно передать None, если таблица стилей не должна использоваться. encoding задает кодировку, которая будет использоваться для вывода (по умолчанию используется системная кодировка по умолчанию).

formatmonthname(theyear, themonth, withyear=True)

Возвращает название месяца в виде строки HTML-таблицы. Если withyear имеет значение true, то год будет включен в строку, в противном случае будет использоваться только название месяца.

HTMLCalendar имеет следующие атрибуты, которые вы можете переопределить, чтобы настроить классы CSS, используемые календарем:

cssclasses

Список классов CSS, используемых для каждого дня недели. По умолчанию список классов выглядит так:

cssclasses = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"]

Для каждого дня можно добавить несколько стилей:

cssclasses = ["mon text-bold", "tue", "wed", "thu", "fri", "sat", "sun red"]

Обратите внимание, что длина этого списка должна составлять семь пунктов.

cssclass_noday

Класс CSS для дня недели, приходящегося на предыдущий или следующий месяц.

Added in version 3.7.

cssclasses_weekday_head

Список классов CSS, используемых для названий дней недели в строке заголовка. По умолчанию используется то же значение, что и cssclasses.

Added in version 3.7.

cssclass_month_head

CSS-класс заголовка месяца (используется formatmonthname()). По умолчанию используется значение "month".

Added in version 3.7.

cssclass_month

Класс CSS для всей таблицы месяца (используется formatmonth()). По умолчанию используется значение "month".

Added in version 3.7.

cssclass_year

Класс CSS для таблицы таблиц всего года (используется formatyear()). По умолчанию используется значение "year".

Added in version 3.7.

cssclass_year_head

Класс CSS для заголовка таблицы для всего года (используется formatyear()). По умолчанию используется значение "year".

Added in version 3.7.

Обратите внимание, что хотя именование описанных выше атрибутов класса является единственным (например, cssclass_month cssclass_noday), можно заменить единственный CSS-класс на список CSS-классов, разделенных пробелами, например:

"text-bold text-red"

Вот пример того, как можно настроить HTMLCalendar:

class CustomHTMLCal(calendar.HTMLCalendar):
    cssclasses = [style + " text-nowrap" for style in
                  calendar.HTMLCalendar.cssclasses]
    cssclass_month_head = "text-center month-head"
    cssclass_month = "text-center month"
    cssclass_year = "text-italic lead"
class calendar.LocaleTextCalendar(firstweekday=0, locale=None)

Этому подклассу TextCalendar можно передать имя локали в конструкторе, и он вернет названия месяцев и дней недели в указанной локали.

class calendar.LocaleHTMLCalendar(firstweekday=0, locale=None)

Этому подклассу HTMLCalendar можно передать имя локали в конструкторе, и он вернет названия месяцев и дней недели в указанной локали.

Примечание

Конструктор, методы formatweekday() и formatmonthname() этих двух классов временно изменяют локаль LC_TIME на заданную локаль. Поскольку текущая локаль задается в рамках всего процесса, они не являются потокобезопасными.

Для простых текстовых календарей этот модуль предоставляет следующие функции.

calendar.setfirstweekday(weekday)

Задает день недели (0 - понедельник, 6 - воскресенье) для начала каждой недели. Значения MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY и SUNDAY приведены для удобства. Например, для установки первого дня недели на воскресенье:

import calendar
calendar.setfirstweekday(calendar.SUNDAY)
calendar.firstweekday()

Возвращает текущую настройку дня недели для начала каждой недели.

calendar.isleap(year)

Возвращает True, если year - високосный год, иначе False.

calendar.leapdays(y1, y2)

Возвращает количество високосных лет в диапазоне от y1 до y2 (исключая), где y1 и y2 - годы.

Эта функция работает для диапазонов, охватывающих смену столетий.

calendar.weekday(year, month, day)

Возвращает день недели (0 - понедельник) для года (1970–…), месяца (112), дня (131).

calendar.weekheader(n)

Возвращает заголовок, содержащий сокращенные названия дней недели. n задает ширину в символах для одного дня недели.

calendar.monthrange(year, month)

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

calendar.monthcalendar(year, month)

Возвращает матрицу, представляющую календарь месяца. Каждая строка представляет неделю; дни за пределами месяца представлены нулями. Каждая неделя начинается с понедельника, если не задан setfirstweekday().

calendar.prmonth(theyear, themonth, w=0, l=0)

Выводит календарь месяца, возвращенный командой month().

calendar.month(theyear, themonth, w=0, l=0)

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

calendar.prcal(year, w=0, l=0, c=6, m=3)

Печатает календарь на весь год, возвращенный командой calendar().

calendar.calendar(year, w=2, l=1, c=6, m=3)

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

calendar.timegm(tuple)

Несвязанная, но удобная функция, которая принимает кортеж времени, например, возвращаемый функцией gmtime() в модуле time, и возвращает соответствующее значение временной метки Unix, предполагая эпоху 1970 года и кодировку POSIX. Фактически, time.gmtime() и timegm() являются обратными друг другу.

Модуль calendar экспортирует следующие атрибуты данных:

calendar.day_name

Массив, представляющий дни недели в текущей локали.

calendar.day_abbr

Массив, представляющий сокращенные дни недели в текущей локали.

calendar.MONDAY
calendar.TUESDAY
calendar.WEDNESDAY
calendar.THURSDAY
calendar.FRIDAY
calendar.SATURDAY
calendar.SUNDAY

Псевдонимы для дней недели, где MONDAY - это 0, а SUNDAY - это 6.

Added in version 3.12.

class calendar.Day

Перечисление, определяющее дни недели как целочисленные константы. Члены этого перечисления экспортируются в область видимости модуля как MONDAY - SUNDAY.

Added in version 3.12.

calendar.month_name

Массив, представляющий месяцы года в текущей локали. В соответствии с обычным соглашением январь является месяцем номер 1, поэтому его длина равна 13, а month_name[0] - пустая строка.

calendar.month_abbr

Массив, представляющий сокращенные месяцы года в текущей локали. В соответствии с обычным соглашением январь является месяцем номер 1, поэтому его длина равна 13, а month_abbr[0] - пустая строка.

calendar.JANUARY
calendar.FEBRUARY
calendar.MARCH
calendar.APRIL
calendar.MAY
calendar.JUNE
calendar.JULY
calendar.AUGUST
calendar.SEPTEMBER
calendar.OCTOBER
calendar.NOVEMBER
calendar.DECEMBER

Псевдонимы для месяцев года, где JANUARY - это 1, а DECEMBER - это 12.

Added in version 3.12.

class calendar.Month

Перечисление, определяющее месяцы года как целочисленные константы. Члены этого перечисления экспортируются в область видимости модуля как JANUARY - DECEMBER.

Added in version 3.12.

Модуль calendar определяет следующие исключения:

exception calendar.IllegalMonthError(month)

Подкласс ValueError, возникающий, когда заданный номер месяца выходит за пределы диапазона 1-12 (включительно).

month

Недействительный номер месяца.

exception calendar.IllegalWeekdayError(weekday)

Подкласс ValueError, возникающий, когда заданный номер дня недели находится вне диапазона 0-6 (включительно).

weekday

Недействительный номер дня недели.

См.также

Модуль datetime

Объектно-ориентированный интерфейс для работы с датами и временем, схожий по функциональности с модулем time.

Модуль time

Низкоуровневые функции, связанные с временем.

Использование командной строки

Added in version 2.5.

Модуль calendar может быть выполнен как сценарий из командной строки для интерактивной печати календаря.

python -m calendar [-h] [-L LOCALE] [-e ENCODING] [-t {text,html}]
                   [-w WIDTH] [-l LINES] [-s SPACING] [-m MONTHS] [-c CSS]
                   [-f FIRST_WEEKDAY] [year] [month]

Например, чтобы распечатать календарь на 2000 год:

$ python -m calendar 2000
                                  2000

      January                   February                   March
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                1  2          1  2  3  4  5  6             1  2  3  4  5
 3  4  5  6  7  8  9       7  8  9 10 11 12 13       6  7  8  9 10 11 12
10 11 12 13 14 15 16      14 15 16 17 18 19 20      13 14 15 16 17 18 19
17 18 19 20 21 22 23      21 22 23 24 25 26 27      20 21 22 23 24 25 26
24 25 26 27 28 29 30      28 29                     27 28 29 30 31
31

       April                      May                       June
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                1  2       1  2  3  4  5  6  7                1  2  3  4
 3  4  5  6  7  8  9       8  9 10 11 12 13 14       5  6  7  8  9 10 11
10 11 12 13 14 15 16      15 16 17 18 19 20 21      12 13 14 15 16 17 18
17 18 19 20 21 22 23      22 23 24 25 26 27 28      19 20 21 22 23 24 25
24 25 26 27 28 29 30      29 30 31                  26 27 28 29 30

        July                     August                  September
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                1  2          1  2  3  4  5  6                   1  2  3
 3  4  5  6  7  8  9       7  8  9 10 11 12 13       4  5  6  7  8  9 10
10 11 12 13 14 15 16      14 15 16 17 18 19 20      11 12 13 14 15 16 17
17 18 19 20 21 22 23      21 22 23 24 25 26 27      18 19 20 21 22 23 24
24 25 26 27 28 29 30      28 29 30 31               25 26 27 28 29 30
31

      October                   November                  December
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                   1             1  2  3  4  5                   1  2  3
 2  3  4  5  6  7  8       6  7  8  9 10 11 12       4  5  6  7  8  9 10
 9 10 11 12 13 14 15      13 14 15 16 17 18 19      11 12 13 14 15 16 17
16 17 18 19 20 21 22      20 21 22 23 24 25 26      18 19 20 21 22 23 24
23 24 25 26 27 28 29      27 28 29 30               25 26 27 28 29 30 31
30 31

Принимаются следующие варианты:

--help, -h

Покажите сообщение о помощи и выйдите.

--locale LOCALE, -L LOCALE

Локаль, которую следует использовать для названий месяцев и дней недели. По умолчанию используется английская.

--encoding ENCODING, -e ENCODING

Кодировка, которую следует использовать для вывода. --encoding требуется, если задан --locale.

--type {text,html}, -t {text,html}

Выведите календарь на терминал в виде текста или HTML-документа.

--first-weekday FIRST_WEEKDAY, -f FIRST_WEEKDAY

День недели, с которого начинается каждая неделя. Должно быть число от 0 (понедельник) до 6 (воскресенье). По умолчанию равно 0.

Added in version 3.13.

year

Год, для которого будет распечатан календарь. По умолчанию выбирается текущий год.

month

Месяц указанного year для печати календаря. Должно быть числом от 1 до 12, и может использоваться только в текстовом режиме. По умолчанию печатается календарь на весь год.

Параметры текстового режима:

--width WIDTH, -w WIDTH

Ширина столбца даты в терминальных колонках. Дата печатается по центру столбца. Любое значение меньше 2 игнорируется. По умолчанию равно 2.

--lines LINES, -l LINES

Количество строк для каждой недели в терминальных строках. Дата выводится по верхнему краю. Любое значение меньше 1 игнорируется. По умолчанию равно 1.

--spacing SPACING, -s SPACING

Промежуток между месяцами в столбцах. Любое значение меньше 2 игнорируется. По умолчанию значение равно 6.

--months MONTHS, -m MONTHS

Количество месяцев, выводимых в одной строке. По умолчанию равно 3.

HTML-mode options:

--css CSS, -c CSS

Путь к таблице стилей CSS, которую следует использовать для календаря. Он должен быть либо относительным к сгенерированному HTML, либо абсолютным HTTP или file:/// URL.