calendar — Функции для работы с календарем

Модуль calendar позволяет выводить календари (в виде простого текста или HTML), а также предоставляет полезные функции для расчета дней. По умолчанию первым днем недели считается Понедельник (индекс 0).

import calendar

Вывод текста в консоль

Можно распечатать красивый текстовый календарь для года или месяца в духе UNIX-утилиты cal.

import calendar

# Печать календаря на конкретный месяц (Год, Месяц)
calendar.prmonth(2024, 2)
# Возвращает:
#    February 2024
# Mo Tu We Th Fr Sa Su
#           1  2  3  4
#  5  6  7  8  9 10 11
# ...

# Печать всего года
print(calendar.calendar(2024))

Расчеты и високосные годы

Определение високосного года — это не всегда очевидная математическая операция. Модуль делает это безошибочно.

import calendar

# Это високосный год?
print(calendar.isleap(2024)) # True

# Сколько раз был 29 февраля с 2000 до 2025?
print(calendar.leapdays(2000, 2025)) 

# В какой день недели была дата? (Возвращает от 0-ПН до 6-ВС)
day_index = calendar.weekday(2024, 12, 31)
print(day_index) # 1 (Вторник)

# Сколько дней в месяце?
# Вернет (День_недели_1_числа, Всего_дней_в_месяце)
print(calendar.monthrange(2024, 2)) # (3, 29)

Полный справочник API (API Reference)

Базовые функции

Функция Описание
calendar.isleap(year) Возвращает True, если год year високосный.
calendar.leapdays(y1, y2) Возвращает количество високосных годов в заданном диапазоне (не включая y2).
calendar.weekday(y, m, d) Возвращает индекс дня недели (0=ПН, 6=ВС) для даты.
calendar.monthrange(y, m) Возвращает кортеж из двух чисел: день недели 1-го числа и количество дней в указанном месяце.

ООП и HTML Классы

Если вам нужен календарь для веб-сайта на Django или Flask, используйте класс HTMLCalendar!

Класс Описание
calendar.Calendar(firstweekday=0) Главный класс-итератор. Позволяет перебирать дни месяца.
calendar.TextCalendar(firstweekday=0) Класс для генерации строковых ASCII календарей.
calendar.HTMLCalendar(firstweekday=0) Удобно! Класс для автоматической генерации HTML-таблиц (тэги <table>, <tr>, <td>) для веб-сайтов.