Модуль Calendar в Python
Полезные методы
Ниже приведены некоторые из наиболее полезных методов класса календаря.
iterweekdays()
Этот метод возвращает итератор, содержащий список индексов дней недели.
Например:
import calendar
c = calendar.Calendar()
for i in c.iterweekdays():
print (i, end=" ")
Вывод:
0 1 2 3 4 5 6
itermonthdates()
Itermonthdates() принимает 2 аргумента: год и месяц. Эта функция возвращает итератор всех дней данного месяца. Кроме того, отображаются все дни до начала месяца и после его окончания, необходимые для получения полной недели.
Пример:
import calendar
c = calendar.Calendar()
for i in c.itermonthdates (2019, 1):
print (i, end=" ")
Вывод:
2018-12-31 2019-01-01 2019-01-02 2019-01-03 ..............2019-02-03
itermonthdays()
Этот метод похож на метод itermonthdates, но возвращает только номера дней.
Пример:
import calendar
c = calendar.Calendar()
for i in c.itermonthdays (2019, 1):
print (i, end=" ")
Вывод:
0 1 2 3 4 5 6........ 31 0 0 0
Как видите, все дни до начала месяца и после конца месяца для получения полной недели установлены на «0».
itermonthdays2()
Этот метод отображает кортеж, состоящий из номеров дня и недели.
Пример:
import calendar
c = calendar.Calendar()
for i in c.itermonthdays2 (2019, 1):
print (i, end=" ")
Вывод:
(0,0) (1,1) (2,2) (3,3) (4,4) (5,5) (6,6) (7,0) (8,1) (9,2) ...........
itermonthdays3()
Этот метод очень похож на метод itermonthdays3(), за исключением того, что он возвращает кортеж из года, месяца и дня месяца.
Пример:
import calendar
c = calendar.Calendar()
for i in c.itermonthdays3 (2019, 1):
print (i, end=" ")
Вывод:
(2018,12,31) (2019,01,01) (2019,01,02).....(2019,01,31) (2019,02,01) (2019,02,02) (2019,02,03)
monthdatescalendar()
Этот метод принимает в качестве аргументов год и месяц и возвращает список полных недель в месяце. Каждая неделя представляет собой список из 7 объектов datetime.date.
Пример:
import calendar
c = calendar.Calendar()
for i in c.monthdatescalendar (2019, 1):
print (i, end=" ")
Вывод:
[datetime.date(2018, 12, 31), datetime.date(2019, 01, 01), datetime.date(2019, 01, 02), datetime.date(2019, 01, 03), datetime.date(2019, 01, 04), datetime.date(2019, 01, 05), datetime.date(2019, 01, 06)... datetime.date(2019, 02, 03)] .....
monthdays2calendar()
Эта функция принимает в качестве аргументов год и месяц и возвращает список недель с каждой неделей в виде 7 кортежей дня месяца и дня недели.
Пример:
import calendar
c = calendar.Calendar()
for i in c.monthdays2calendar (2019, 1):
print(i, end=" ")
Вывод:
[(0,0) (1,1) (2,2) (3,3) (4,4) (5,5) (6,6)] [(7,0) (8,1) (9,2) (10,3) (11,4) (12,5) (13,6)] ....
Как видите, первое значение кортежа – это день месяца (0-31), а второе значение кортежа – это номер недели (0-6).
monthdayscalendar()
Этот метод принимает в качестве аргументов год и месяц и возвращает список полных недель, при этом каждая неделя представляет собой список дней месяца.
Пример:
import calendar
c = calendar.Calendar()
for i in c.monthdayscalendar(2019, 1):
print (i, end=" ")
Пример вывода:
[0, 1, 2 , 3, 4, 5, 6] [7, 8, 9, 10, 11, 12, 13]....[28, 29, 30, 31, 0, 0, 0]
yeardatescalendar()
Эта функция принимает год (гггг) и количество месяцев в строке месяца (w). По умолчанию параметр w равен 3. Функция возвращает список строк месяца, где дни – это объекты datetime.date.
Пример:
import calendar
c = calendar.Calendar()
for i in c.yeardatescalendar(2019, 3):
print (i, end=" ")
Вывод:
[[[datetime.date(2018, 12, 31), datetime.date(2019, 1, 1), datetime.date(2019, 1, 2), datetime.date(2019, 1, 3), datetime.date(2019, 1, 4), datetime.date(2019, 1, 5), datetime.date(2019, 1, 6)], [datetime.date(2019, 1, 7), datetime.date(2019, 1, 8), datetime.date(2019, 1, 9), datetime.date(2019, 1, 10), datetime.date(2019, 1, 11), datetime.date(2019, 1, 12), datetime.date(2019, 1, 13)], [datetime.date(2019, 1, 14), datetime.date(2019, 1, 15), datetime.date(2019, 1, 16), datetime.date(2019, 1, 17), datetime.date(2019, 1, 18), datetime.date(2019, 1, 19), datetime.date(2019, 1, 20)], [datetime.date(2019, 1, 21), datetime.date(2019, 1, 22), datetime.date(2019, 1, 23), datetime.date(2019, 1, 24), datetime.date(2019, 1, 25), datetime.date(2019, 1, 26), datetime.date(2019, 1, 27)], [datetime.date(2019, 1, 28), datetime.date(2019, 1, 29), datetime.date(2019, 1, 30), datetime.date(2019, 1, 31), datetime.date(2019, 2, 1), datetime.date(2019, 2, 2), datetime.date(2019, 2, 3)]] ... ]
yeardays2calendar()
Эта функция принимает год (yyyy) и количество месяцев, которые мы хотим в строке месяца (w). По умолчанию параметр w равен 3. Функция возвращает список недель в виде кортежей дней месяца и дня недели.
Пример:
import calendar
c = calendar.Calendar()
for i in c.yeardays2calendar(2019, 3):
print (i, end=" ")
Вывод:
[[[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6)], [(7, 0), (8, 1), (9, 2), (10, 3), (11, 4), (12, 5), (13, 6)], [(14, 0), (15, 1), (16, 2), (17, 3), (18, 4), (19, 5), (20, 6)], [(21, 0), (22, 1), (23, 2), (24, 3), (25, 4), (26, 5), (27, 6)], [(28, 0), (29, 1), (30, 2), (31, 3), (0, 4), (0, 5), (0, 6)]], [[(0, 0), (0, 1), (0, 2), (0, 3), (1, 4), (2, 5), (3, 6)], [(4, 0), (5, 1), (6, 2), (7, 3), (8, 4), (9, 5), (10, 6)], [(11, 0), (12, 1), (13, 2), (14, 3), (15, 4), (16, 5), (17, 6)], [(18, 0), (19, 1), (20, 2), (21, 3), (22, 4), (23, 5), (24, 6)], [(25, 0), (26, 1), (27, 2), (28, 3), (0, 4), (0, 5), (0, 6)]], [[(0, 0), (0, 1), (0, 2), (0, 3), (1, 4), (2, 5), (3, 6)] ... ]]
yeardayscalendar()
Эта функция принимает год (yyyy) и количество месяцев, которое мы хотим в строке месяца (w). По умолчанию параметр w равен 3. Функция возвращает список недель как день месяца.
Пример:
import calendar
c = calendar.Calendar()
for i in c.yeardayscalendar(2019, 3):
print (i, end=" ")
Вывод:
[[[0, 1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17, 18, 19, 20], [21, 22, 23, 24, 25, 26, 27], [28, 29, 30, 31, 0, 0, 0]], [[0, 0, 0, 0, 1, 2, 3], [4, 5, 6, 7, 8, 9, 10], [11, 12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23, 24], [25, 26, 27, 28, 0, 0, 0]], [[0, 0, 0, 0, 1, 2, 3], [4, 5, 6, 7, 8, 9, 10], [11, 12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23, 24], [25, 26, 27, 28, 29, 30, 31]]] [[[1, 2, 3, 4, 5, 6, 7], [8, 9, 10, 11, 12, 13, 14], [15, 16, 17, 18, 19, 20, 21], [22, 23, 24, 25, 26, 27, 28], [29, 30, 0, 0, 0, 0, 0]] ... ]]
Класс TextCalendar
TextCalendar используется для создания текстовых календарей, аналогично классу Calendar. Этот класс принимает конструктор, в котором для первого дня недели по умолчанию установлено значение 0. Давайте посмотрим на методы, предоставляемые классом TextCalendar.
formatmonth()
Этот метод принимает 4 аргумента, а именно: год, месяц, столбец ширины дней (w) и количество строк, используемых каждой неделей (l). Этот метод возвращает многострочную строку.
Пример:
import calendar c = calendar.TextCalendar() print(c.formatmonth(2019, 1))
Это отображает календарь на январь 2019 года.
Вывод:
January 2019
Mo Tu We Th Fr Sa Su
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
prmonth()
Этот метод печатает календарь на месяц, возвращенный методом formatmonth. Мы можем использовать эту функцию, чтобы избежать использования функции «print» для печати календаря на терминале.
Чтобы распечатать календарь на январь 2019 года, используйте:
c.prmonth(2019, 1)
formatyear()
Этот метод возвращает календарь в столбце «m» на весь год. В эту функцию передаются следующие аргументы: год (yyyy), ширина столбца даты (w), количество строк в неделю (l), количество пробелов между столбцом месяца (c), количество столбцов (m).
Класс LocaleTextCalendar
Это подкласс класса TextCalendar. Его конструктор принимает дополнительный аргумент locale. Он вернет названия месяца и дня недели в указанном языковом стандарте. Мы можем создать объект текстового календаря на нашем родном языке. Мы можем получить месяц или дни недели или другие данные для отображения календаря, отформатированного из локальной системы, кроме текущего по умолчанию. Пример:
import calendar
for name in calendar.month_name:
print(name)
Это напечатает название месяцев в соответствии с локальной системой.
Вывод:
January February March April May June July August September October November December
Класс HTMLCalendar
Это похоже на класс TextCalendar, но генерирует календарь HTML. В конструкторе этого класса для параметра firstweekday установлено значение «0».
Ниже приведены некоторые методы, предоставляемые классом HTMLCalendar.
formatmonth()
Эта функция отображает календарь на месяц в формате таблицы HTML. Мы можем отобразить календарь на апрель 2019 года в виде таблицы HTML, используя:
hc = calendar.HTMLCalendar() print(hc.formatmonth(2019, 4))
Вывод:
<table border="0" cellpadding="0" cellspacing="0" class="month"> <tr><th colspan="7" class="month">April 2019</th></tr> <tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr> <tr><td class="mon">1</td><td class="tue">2</td><td class="wed">3</td><td class="thu">4</td><td class="fri">5</td><td class="sat">6</td><td class="sun">7</td></tr> <tr><td class="mon">8</td><td class="tue">9</td><td class="wed">10</td><td class="thu">11</td><td class="fri">12</td><td class="sat">13</td><td class="sun">14</td></tr> <tr><td class="mon">15</td><td class="tue">16</td><td class="wed">17</td><td class="thu">18</td><td class="fri">19</td><td class="sat">20</td><td class="sun">21</td></tr> <tr><td class="mon">22</td><td class="tue">23</td><td class="wed">24</td><td class="thu">25</td><td class="fri">26</td><td class="sat">27</td><td class="sun">28</td></tr> <tr><td class="mon">29</td><td class="tue">30</td><td class="noday">nbsp;</td><td class="noday">nbsp;</td><td class="noday">nbsp;</td><td class="noday">nbsp;</td><td class="noday">nbsp;</td></tr> </table>
formatyear()
Этот метод принимает год и количество месяцев в строке (w) в качестве аргументов и печатает календарь всего года в виде таблицы HTML. По умолчанию ширина установлена на 3. Мы можем отобразить календарь на 2019 год в виде таблицы HTML, используя:
hc = calendar.HTMLCalendar() print(hc.formatyear(2019, 4))
formatyearpage()
Этот метод принимает в качестве аргументов год, количество месяцев в строке (w), каскадную таблицу стилей (CSS) и кодировку. Аргументы css и encoding могут иметь значение None, если мы не используем CSS и кодировку. Эта функция отображает календарь на весь год в виде HTML-страницы с шириной по умолчанию 3. Мы можем распечатать календарь на 2019 год в виде HTML-страницы, используя:
hc = calendar.HTMLCalendar() print(hc.formatyearpage(2019, 3, css=None, encoding=None)) b'<?xml version="1.0" encoding="utf-8"?>\n<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\n<html>\n<head>\n<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />\n<title>Calendar for 2019</title>\n</head>\n<body>\n<table border="0" cellpadding="0" cellspacing="0" class="year">\n<tr><th colspan="3" class="year">2019</th></tr><tr><td><table border="0" cellpadding="0" cellspacing="0" class="month">\n<tr><th colspan="7" class="month">January</th></tr>\n<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>\n<tr><td class="noday">nbsp;</td><td class="tue">1</td><td class="wed">2</td><td class="thu">3</td><td class="fri">4</td><td class="sat">5</td><td class="sun">6</td></tr> ... </table></body>\n</html>\n'
Вывод HTMLCalendar похож на текстовую версию, но заключен в HTML-теги. Ячейка таблицы HTML содержит атрибут класса, соответствующий дню недели. Следовательно, HTML-календарь можно стилизовать с помощью CSS.
Класс LocaleHTMLCalendar
Это подкласс класса HTMLCalendar. Его конструктор принимает дополнительный аргумент locale. Он вернет названия месяцев и дней недели в указанном языковом стандарте в виде таблицы HTML. Мы можем создать объект текстового календаря на нашем родном языке. Например, мы можем сгенерировать календарь на апрель 2019 года в виде таблицы HTML в локали en_AU, используя:
import calendar cal = calendar.LocaleHTMLCalendar(locale='en_AU.utf8') print(cal.formatmonth(2019, 4))
Вывод:
<table border="0" cellpadding="0" cellspacing="0" class="month"> <tr><th colspan="7" class="month">April 2019</th></tr> <tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr> <tr><td class="mon">1</td><td class="tue">2</td><td class="wed">3</td><td class="thu">4</td><td class="fri">5</td><td class="sat">6</td><td class="sun">7</td></tr> <tr><td class="mon">8</td><td class="tue">9</td><td class="wed">10</td><td class="thu">11</td><td class="fri">12</td><td class="sat">13</td><td class="sun">14</td></tr> <tr><td class="mon">15</td><td class="tue">16</td><td class="wed">17</td><td class="thu">18</td><td class="fri">19</td><td class="sat">20</td><td class="sun">21</td></tr> <tr><td class="mon">22</td><td class="tue">23</td><td class="wed">24</td><td class="thu">25</td><td class="fri">26</td><td class="sat">27</td><td class="sun">28</td></tr> <tr><td class="mon">29</td><td class="tue">30</td><td class="noday">nbsp;</td><td class="noday">nbsp;</td><td class="noday">nbsp;</td><td class="noday">nbsp;</td><td class="noday">nbsp;</td></tr> </table>