Модуль Calendar в Python

Модуль Calendar в Python


В Python есть встроенный модуль Calendar, который содержит полезные классы и функции для поддержки различных операций с календарем. По умолчанию модуль «Calendar» следует григорианскому календарю, где понедельник – это первый день (0) недели, а воскресенье –последний день недели (6).


В Python модули datetime и time также предоставляют низкоуровневые функции, связанные с календарем. В дополнение к этим модулям, модуль Calendar предоставляет важные функции, связанные с отображением и управлением календарями.


Для печати календарей и управления ими в модуле Calendar есть 3 важных класса: Calendar, TextCalendar и HTMLCalendar. В этой статье мы увидим, как эти классы могут помочь реализовать множество функций, связанных с календарем.


Функциональные возможности

Чтобы использовать модуль Calendar, нам нужно сначала импортировать модуль, используя:

import calendar

Давайте посмотрим на список полезных функций в этом модуле.


Печать календаря на определенный месяц

Мы можем распечатать календарь на определенный месяц, используя следующую функцию:

calendar.month(yyyy, m, w, l)

Аргументы, передаваемые этой функции, – это год (yyyy), месяц (m), ширина столбца даты (w) и количество строк в неделю (l), соответственно. Например, давайте воспользуемся этой функцией для печати календаря на март 2019 года:

print ("Calendar of March 2019 is:") 
print (calendar.month(2019, 3, 2, 1))

Вывод:

Calendar of March 2019 is:
     March 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

Печать календаря на определенный год

Мы можем распечатать календарь на целый год, используя следующую функцию:

calendar.calendar(yyyy, w, l, c, m) 

Вышеупомянутая функция возвращает календарь на весь год для года, указанного в качестве аргумента. В эту функцию передаются следующие аргументы: год (yyyy), ширина столбца даты (w), количество строк в неделю (l), количество пробелов между столбцом месяца (c), количество столбцов (m).

Например, чтобы распечатать календарь на 2019 год, используйте:

print(calendar.calendar(2019, 2, 2, 6, 3)) 

Вывод:

      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  3  4  5  6                1  2  3                1  2  3 
7  8  9  10 11 12 13   4  5  6  7  8  9  10   4  5  6  7  8  9  10    
14 15 16 17 18 19 20   11 12 13 14 15 16 17   11 12 13 14 15 16 17    21 22 23 24 25 26 27   18 19 20 21 22 23 24   18 19 20 21 22 23 24    28 29 30 31            25 26 27 28            25 26 27 28 29 30 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  3  4  5  6  7          1  2  3  4  5                   1  2 
8  9  10 11 12 13 14   6  7  8  9  10 11 12   3  4  5  6  7  8  9 
15 16 17 18 19 20 21   13 14 15 16 17 18 19   10 11 12 13 14 15 16 
22 23 24 25 26 27 28   20 21 22 23 24 25 26   17 18 19 20 21 22 23 
29 30                  27 28 29 30 31         24 25 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  3  4  5  6  7             1  2  3  4                      1 
8  9  10 11 12 13 14   5  6  7  8  9  10 11   2  3  4  5  6  7  8 
15 16 17 18 19 20 21   12 13 14 15 16 17 18   9  10 11 12 13 14 15 
22 23 24 25 26 27 28   19 20 21 22 23 24 25   16 17 18 19 20 21 22 
29 30 31               26 27 28 29 30 31      23 24 25 26 27 28 29
                                              30  

       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  2  3  4  5  6                1  2  3                      1 
7  8  9  10 11 12 13   4  5  6  7  8  9  10   2  3  4  5  6  7  8 
14 15 16 17 18 19 20   11 12 13 14 15 16 17   9  10 11 12 13 14 15 
21 22 23 24 25 26 27   18 19 20 21 22 23 24   16 17 18 19 20 21 22 
28 29 30 31            25 26 27 28 29 30      23 24 25 26 27 28 29   
                                              30 31 
 

Примечание. Вместо использования «print» мы можем поочередно использовать функции calendar.prmonth() и calendar.pryear() для печати календарей на месяц и год. Эти функции распечатывают вывод на вашем терминале.

Проверка на високосный год

Мы можем использовать функцию isleap(), чтобы проверить, является ли год високосным или нет. Год передается в качестве аргумента функции, и функция возвращает True, если год високосный, в противном случае возвращает False, если год не високосный. Давайте воспользуемся этой функцией, чтобы увидеть, является ли 2016 год високосным:

calendar.isleap(2016) 

Вывод:

True 

Количество високосных лет в пределах диапазона

Также можно проверить количество високосных лет в заданном диапазоне лет, указанном в качестве аргумента функции ниже:

calendar.leapdays(year1, year2) 

Аргументы, переданные в функцию, – это 2 действительных значения года. Эта функция возвращает количество високосных лет между этими годами.

Пример:

calendar.leapdays(2000, 2017)  

Вывод:

5 

Как видно, между 2000 и 2017 годами 5 високосных лет, следовательно, результат равен 5.

Возврат дня недели

Метод буднего дня принимает 3 аргумента, а именно: год, месяц и день. Функция возвращает день недели, при этом понедельник имеет индекс 0, а воскресенье – 6. Например:

calendar.weekday(2019, 3, 21)  

Вывод:

3  

Как видно, эта функция возвращает значение индекса «3», то есть «четверг».

Получение сокращенных названий дней недели

Функция weekheader принимает аргумент n, который указывает количество символов для определенного имени дня недели и возвращает заголовок, содержащий сокращенные имена дней недели.

Например:

print (calendar.weekheader(2)) 

Вывод:

Mo Tu We Th Fr Sa Su 

По аналогии:

print (calendar.weekheader(3)) 

Вывод:

Mon Tue Wed Thu Fri Sat Sun 

Получение количества дней в месяце

Функция monthrange принимает 2 аргумента: год и месяц. Эта функция возвращает кортеж, содержащий индекс дня недели, в который начинается месяц, и количество дней в месяце.

Например:

print (calendar.monthrange(1983, 12)) 

Вывод:

{3,31} 

Поскольку первый день декабря 1983 г. был четвергом, функция возвращает значение индекса четверга в качестве первого элемента кортежа и 31, поскольку это количество дней в декабре.

Получение недели в месяце

Функция monthcalendar принимает 2 аргумента: год и месяц и возвращает матрицу, в которой каждая строка представляет неделю в этом месяце.

Например:

print(calendar.monthcalendar(1983, 11)) 

Вывод:

[[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,19,30,0,0,0]] 

Как видите, массив каждой недели начинается с понедельника, а дни вне месяца представлены нулями. Итак, первый массив указывает, что первый день месяца – вторник.

Изменение настроек по умолчанию

Настройки календаря по умолчанию можно изменить в соответствии с вашими потребностями. Например, следующий скрипт устанавливает понедельник, как первый день недели.

class calendar.calendar(firstweekday=0) 

По умолчанию календари следуют европейскому соглашению, в котором понедельник является первым днем недели, а воскресенье – последним днем недели. Кроме того, месяц январь имеет значение индекса 1, а декабрь – значение индекса 12.


Report Page