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)¶
Возвращает итератор для месяца month (1–12) в году year. Этот итератор вернет все дни (в виде объектов
datetime.date
) за месяц и все дни до начала месяца или после окончания месяца, которые необходимы для получения полной недели.
- itermonthdays(year, month)¶
Возвращает итератор для месяца month в году year, аналогичный
itermonthdates()
, но не ограниченный диапазономdatetime.date
. Возвращаемые дни будут просто числами дней месяца. Для дней, не входящих в указанный месяц, номер дня равен0
.
- itermonthdays2(year, month)¶
Возвращает итератор для месяца month в году year, аналогичный
itermonthdates()
, но не ограниченный диапазономdatetime.date
. Возвращаемые дни будут представлять собой кортежи, состоящие из номера дня месяца и номера дня недели.
- itermonthdays3(year, month)¶
Возвращает итератор для месяца month в году year, аналогичный
itermonthdates()
, но не ограниченный диапазономdatetime.date
. Возвращаемые дни будут представлять собой кортежи, состоящие из номеров года, месяца и дня месяца.Добавлено в версии 3.7.
- itermonthdays4(year, month)¶
Возвращает итератор для месяца month в году year, аналогичный
itermonthdates()
, но не ограниченный диапазономdatetime.date
. Возвращаемые дни будут представлять собой кортежи, состоящие из номеров года, месяца, дня месяца и дня недели.Добавлено в версии 3.7.
- monthdatescalendar(year, month)¶
Возвращает список недель в месяце month года* в виде полных недель. Недели - это списки из семи объектов
datetime.date
.
- monthdays2calendar(year, month)¶
Возвращает список недель в месяце month of year в виде полных недель. Недели - это списки из семи наборов номеров дней и номеров будней.
- monthdayscalendar(year, month)¶
Возвращает список недель в месяце month года* в виде полных недель. Недели - это списки с номерами семи дней.
- yeardatescalendar(year, width=3)¶
Возвращает данные за указанный год, готовые к форматированию. Возвращаемое значение представляет собой список строк за месяц. Каждая строка месяца содержит до ширины месяцев (значение по умолчанию равно 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-таблицы. ширина (значение по умолчанию равно 3) указывает количество месяцев в строке.
- formatyearpage(theyear, width=3, css='calendar.css', encoding=None)¶
Возвращает годовой календарь в виде полноценной HTML-страницы. ширина (значение по умолчанию равно 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 для дня недели, приходящегося на предыдущий или предстоящий месяц.
Добавлено в версии 3.7.
- cssclasses_weekday_head¶
Список CSS-классов, используемых для обозначения дней недели в строке заголовка. Значение по умолчанию такое же, как
cssclasses
.Добавлено в версии 3.7.
- cssclass_month_head¶
Главный CSS-класс месяца (используется
formatmonthname()
). Значение по умолчанию -"month"
.Добавлено в версии 3.7.
- cssclass_month¶
Класс CSS для таблицы за весь месяц (используется параметром
formatmonth()
). Значение по умолчанию -"month"
.Добавлено в версии 3.7.
- cssclass_year¶
Класс CSS для таблицы таблиц за весь год (используется с помощью
formatyear()
). Значение по умолчанию -"year"
.Добавлено в версии 3.7.
- cssclass_year_head¶
Класс CSS для заголовка таблицы за весь год (используется как
formatyear()
). Значение по умолчанию -"year"
.Добавлено в версии 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
на заданный locale. Поскольку текущая локаль является настройкой для всего процесса, они не являются потокобезопасными.
Для простых текстовых календарей этот модуль предоставляет следующие функции.
- 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)¶
Возвращает календарь из 3 столбцов на весь год в виде многострочной строки, используя
formatyear()
из классаTextCalendar
.
- calendar.timegm(tuple)¶
Несвязанная, но удобная функция, которая принимает временной кортеж, такой как возвращаемый функцией
gmtime()
в модулеtime
, и возвращает соответствующее значение временной метки Unix, предполагая эпоху 1970 года и кодировку POSIX. На самом деле,time.gmtime()
иtimegm()
являются обратными друг другу.
Модуль calendar
экспортирует следующие атрибуты данных:
- calendar.day_name¶
Массив, представляющий дни недели в текущем языковом стандарте.
- calendar.day_abbr¶
Массив, представляющий сокращенные дни недели в текущем языковом стандарте.
- calendar.month_name¶
Массив, представляющий месяцы года в текущем языковом стандарте. Это следует из обычного правила, согласно которому январь является месяцем с номером 1, поэтому его длина равна 13, а
month_name[0]
- это пустая строка.
- calendar.month_abbr¶
Массив, представляющий сокращенные месяцы года в текущем языковом стандарте. Это следует из обычного правила, согласно которому январь является месяцем с номером 1, поэтому его длина равна 13, а
month_abbr[0]
- это пустая строка.
- calendar.MONDAY¶
- calendar.TUESDAY¶
- calendar.WEDNESDAY¶
- calendar.THURSDAY¶
- calendar.FRIDAY¶
- calendar.SATURDAY¶
- calendar.SUNDAY¶
Псевдонимы для номеров дней, где
MONDAY
- это0
, аSUNDAY
- это6
.
Модуль calendar
определяет следующие исключения:
- exception calendar.IllegalMonthError(month)¶
Подкласс
ValueError
, который создается, когда заданный номер месяца выходит за пределы диапазона 1-12 (включительно).- month¶
Неверный номер месяца.
- exception calendar.IllegalWeekdayError(weekday)¶
Подкласс
ValueError
, вызываемый, когда заданный номер дня недели выходит за пределы диапазона 0-6 (включительно).- weekday¶
Неверный номер дня недели.
См.также
Использование командной строки¶
Добавлено в версии 2.5.
Модуль calendar
может быть запущен в виде скрипта из командной строки для интерактивной печати календаря.
python -m calendar [-h] [-L LOCALE] [-e ENCODING] [-t {text,html}]
[-w WIDTH] [-l LINES] [-s SPACING] [-m MONTHS] [-c CSS]
[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-документа.
- year¶
Год, на который будет напечатан календарь. Это должно быть число от 1 до 9999. По умолчанию используется текущий год.
- 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-режима:
- --css CSS, -c CSS¶
Путь к таблице стилей CSS, используемой для календаря. Он должен быть либо относительным к сгенерированному HTML, либо абсолютным HTTP или
file:///
URL.