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.leapdays(y1, y2)¶
Возвращает количество високосных лет в диапазоне от y1 до y2 (исключая), где y1 и y2 - годы.
Эта функция работает для диапазонов, охватывающих смену столетий.
- calendar.weekday(year, month, day)¶
Возвращает день недели (
0
- понедельник) для года (1970
–…), месяца (1
–12
), дня (1
–31
).
- 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¶
Недействительный номер дня недели.
См.также
Использование командной строки¶
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.