Содержание страницы
calendar – Общие функции работы с календарём¶calendar – General calendar-related functions
Исходный код: Lib/calendar.py
Этот модуль позволяет выводить календари, как программа Unix cal, и предоставляет дополнительные полезные функции, связанные с календарём. По умолчанию в этих календарях первый день недели – понедельник, а последний – воскресенье (европейская конвенция). Используйте setfirstweekday(), чтобы установить первый день недели на воскресенье (6) или любой другой день недели. Параметры, задающие даты, передаются в виде целых чисел. За дополнительными возможностями обращайтесь также к модулям datetime и time.
Функции и классы, определённые в этом модуле, используют идеализированный календарь – текущий григорианский календарь, неограниченно расширенный в обоих направлениях. Это соответствует определению «пролептического григорианского» календаря из книги Дершовица и Рейнгольда «Calendrical Calculations», где он является базовым для всех вычислений. Нулевые и отрицательные годы интерпретируются в соответствии со стандартом 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 года year в виде полных недель. Каждая неделя – список из семи объектов
datetime.date.
- monthdays2calendar(year, month)¶
Возвращает список недель в месяце month года year в виде полных недель. Каждая неделя – это список из семи кортежей с номером дня и номером дня недели.
- monthdayscalendar(year, month)¶
Возвращает список недель в месяце month года year в виде полных недель. Каждая неделя – это список из семи номеров дней.
- 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-класс для дня недели, приходящегося на предыдущий или следующий месяц.
Добавлено в версии 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_monthcssclass_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– понедельник) для year (1970–…), month (1–12), day (1–31).
- calendar.weekheader(n)¶
Возвращает заголовок, содержащий сокращённые названия дней недели. n задаёт ширину в символах для одного дня недели.
- calendar.monthrange(year, month)¶
Возвращает день недели первого дня месяца и количество дней в месяце для указанных 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.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¶
Неверный номер дня недели.
См. также
Использование командной строки¶Command-Line Usage
Новое в версии 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.