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.isleap(year)

Возвращает True, если год является високосным, в противном случае 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)

Возвращает календарь из 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

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

См.также

Модуль datetime

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

Модуль time

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

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

Добавлено в версии 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.

Вернуться на верх