日付 時刻

【Python】カレンダーを生成する方法 ~ calendar ~

【Python】カレンダーを生成する方法 _ calendar _

Pythonでカレンダーを生成するためのcalendarモジュールの使い方の基本について解説します。

カレンダーを生成する ~ calendar ~

Pythonで日付や時刻を操作する場合には、datetimeモジュールを一般的に使用します。しかし、プログラムを作成している場合にはカレンダーを使いたくなることもよくあります。

このような場合に、Pythonではカレンダーの生成に特化したcalendarモジュールが用意されています。本記事では、calendarモジュールを使ってカレンダーを扱う方法について説明します。

月間カレンダーの取得方法

任意の年月のカレンダーを取得する方法について紹介します。

月間カレンダーを文字列として取得する month

calendarモジュールを使用して月間カレンダーを取得したい場合には、以下の例のようにmonthを使用して表示したい年月を指定します。

import calendar

# カレンダー形式で出力する
# (第1引数:「年」、第2引数:「月」、第3引数:「1日を表現する文字幅」)
print(calendar.month(2022, 1, 4))
【実行結果】
           January 2022
Mon  Tue  Wed  Thu  Fri  Sat  Sun
                           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

monthは、第1引数:「年」、第2引数:「月」、第3引数:「1日を表現する文字幅」で、返却値は文字列(str)になっています。文字幅の数値を小さくするともう少し狭まった表示になります。

月間カレンダーの最初の曜日を指定する setfirstweekday

month関数でカレンダーを取得すると月曜始まりのカレンダーが取得できます。しかし、場合によっては日曜始まりのカレンダーが欲しい場合もあります。その場合には、以下の例のように事前にsetfirstweekday関数を使って最初の曜日を指定します。

setfirstweekdayでは、数値で最初の曜日を指定します。数値と曜日の対応は「0:月 1:火 2:水 3:木 4:金 5:土 6:日」となっており、デフォルトの曜日は月曜(0)です。

import calendar

# setfirstweekdayでカレンダーの最初になる曜日を指定する。(デフォルトは月曜)
# 0:月 1:火 2:水 3:木 4:金 5:土 6:日

# 日曜を最初に設定する
calendar.setfirstweekday(6)
print(calendar.month(2022, 1, 4))

# (あまり使う機会はないかもしれないが)火曜を最初に設定する
calendar.setfirstweekday(1)
print(calendar.month(2022, 1, 4))
【実行結果】
           January 2022
Sun  Mon  Tue  Wed  Thu  Fri  Sat
                                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

           January 2022
Tue  Wed  Thu  Fri  Sat  Sun  Mon
                      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

月間カレンダーをリスト形式で取得する monthcalendar

カレンダーの数値をリストとして取り込んで使用したい場合には、monthcalendarを用いて以下のようにすることができます。

import calendar

# monthcalendar関数でカレンダーをリストとして取得する
calendar_list = calendar.monthcalendar(2022, 1)
print(calendar_list)
【実行結果】
[[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, 0, 0, 0, 0, 0, 0]]

上記の例のように取得したリストで当該月に日がない部分には「0」が設定されます。このようにリストにカレンダーを取得して活用することも可能です。

年間カレンダーの取得方法

年間カレンダーを文字列として取得する calendar

calendarモジュールを使用して年間カレンダーを取得したい場合には、以下の例のようにcalendarを使用して表示したい年を指定します。

import calendar

# 年間カレンダーを出力する
print(calendar.calendar(2023))
【実行結果】
                                  2023

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

上記のようにcalendarは、対象年を引数に渡すことで当該年のカレンダーを文字列(str)で返却します。

年間カレンダーで1行に出力する月数や幅を指定する

calendarでは、m引数で指定することで1行に出力する月の数を指定することが可能です。デフォルトはm=3になっています。また、c引数で月と月の間の幅を、w引数で月内の列幅を、l引数で月内の行幅を指定することが可能です。

以下は、m=2, c=5, w=3, l=2とした場合の表示結果です。

import calendar

# 年間カレンダーを出力する 1行の月数や各種幅を指定
print(calendar.calendar(2023, m=2, c=5, w=3, l=2))
【実行結果】
                            2023



          January                         February

Mon Tue Wed Thu Fri Sat Sun     Mon Tue Wed Thu Fri Sat Sun

                          1               1   2   3   4   5

  2   3   4   5   6   7   8       6   7   8   9  10  11  12

  9  10  11  12  13  14  15      13  14  15  16  17  18  19

 16  17  18  19  20  21  22      20  21  22  23  24  25  26

 23  24  25  26  27  28  29      27  28

 30  31



           March                           April

Mon Tue Wed Thu Fri Sat Sun     Mon Tue Wed Thu Fri Sat Sun

          1   2   3   4   5                           1   2

  6   7   8   9  10  11  12       3   4   5   6   7   8   9

 13  14  15  16  17  18  19      10  11  12  13  14  15  16

 20  21  22  23  24  25  26      17  18  19  20  21  22  23

 27  28  29  30  31              24  25  26  27  28  29  30



            May                             June

Mon Tue Wed Thu Fri Sat Sun     Mon Tue Wed Thu Fri Sat Sun

  1   2   3   4   5   6   7                   1   2   3   4

  8   9  10  11  12  13  14       5   6   7   8   9  10  11

 15  16  17  18  19  20  21      12  13  14  15  16  17  18

 22  23  24  25  26  27  28      19  20  21  22  23  24  25

 29  30  31                      26  27  28  29  30



            July                           August

Mon Tue Wed Thu Fri Sat Sun     Mon Tue Wed Thu Fri Sat Sun

                      1   2           1   2   3   4   5   6

  3   4   5   6   7   8   9       7   8   9  10  11  12  13

 10  11  12  13  14  15  16      14  15  16  17  18  19  20

 17  18  19  20  21  22  23      21  22  23  24  25  26  27

 24  25  26  27  28  29  30      28  29  30  31

 31



         September                        October

Mon Tue Wed Thu Fri Sat Sun     Mon Tue Wed Thu Fri Sat Sun

                  1   2   3                               1

  4   5   6   7   8   9  10       2   3   4   5   6   7   8

 11  12  13  14  15  16  17       9  10  11  12  13  14  15

 18  19  20  21  22  23  24      16  17  18  19  20  21  22

 25  26  27  28  29  30          23  24  25  26  27  28  29

                                 30  31



          November                        December

Mon Tue Wed Thu Fri Sat Sun     Mon Tue Wed Thu Fri Sat Sun

          1   2   3   4   5                       1   2   3

  6   7   8   9  10  11  12       4   5   6   7   8   9  10

 13  14  15  16  17  18  19      11  12  13  14  15  16  17

 20  21  22  23  24  25  26      18  19  20  21  22  23  24

 27  28  29  30                  25  26  27  28  29  30  31

上記のように表示数を調整した月間カレンダーの文字列を取得できます。各変数を必要に応じて変更してみてください。

カレンダーをHTMLで取得する

上記までの例では、カレンダーを文字列で取得してきましたが、calendar.HTMLCalendarを用いることで、HTML形式の文字列で取得することができます。カレンダーは<table>として表現されます。

月間カレンダーをHTMLで取得する

月間カレンダーをHTMLで取得したい場合には、以下の例のようにformatmonthを使用して表示したい年月を指定します。

import calendar

# HTMLCalendarオブジェクトを生成
html_calendar = calendar.HTMLCalendar()

# 月間カレンダーをHTMLで取得
print(html_calendar.formatmonth(2023, 1))
【実行結果】
<table border="0" cellpadding="0" cellspacing="0" class="month">
<tr><th colspan="7" class="month">January 2023</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="noday">&nbsp;</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><td class="sun">1</td></tr>
<tr><td class="mon">2</td><td class="tue">3</td><td class="wed">4</td><td class="thu">5</td><td class="fri">6</td><td class="sat">7</td><td class="sun">8</td></tr>
<tr><td class="mon">9</td><td class="tue">10</td><td class="wed">11</td><td class="thu">12</td><td class="fri">13</td><td class="sat">14</td><td class="sun">15</td></tr>
<tr><td class="mon">16</td><td class="tue">17</td><td class="wed">18</td><td class="thu">19</td><td class="fri">20</td><td class="sat">21</td><td class="sun">22</td></tr>
<tr><td class="mon">23</td><td class="tue">24</td><td class="wed">25</td><td class="thu">26</td><td class="fri">27</td><td class="sat">28</td><td class="sun">29</td></tr>
<tr><td class="mon">30</td><td class="tue">31</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>

【HTML出力】

January 2023
MonTueWedThuFriSatSun
      1
2345678
9101112131415
16171819202122
23242526272829
3031     

月間カレンダーをHTMLで取得する(最初の曜日指定)

月間カレンダーで最初の曜日を指定したい場合には、以下の例のようにHTMLCalendarクラスのインスタンスを生成する際にfirstweekdayで指定します。

firstweekdayでは、数値で最初の曜日を指定します。数値と曜日の対応は「0:月 1:火 2:水 3:木 4:金 5:土 6:日」となっており、デフォルトの曜日は月曜(0)です。

import calendar

# HTMLCalendarオブジェクトを生成
# firstweekday引数でカレンダーの最初になる曜日を指定する。(デフォルトは月曜)
# 0:月 1:火 2:水 3:木 4:金 5:土 6:日
html_calendar = calendar.HTMLCalendar(firstweekday=6)

# 日曜を最初に設定する
print(html_calendar.formatmonth(2023, 1))
【実行結果】
<table border="0" cellpadding="0" cellspacing="0" class="month">
<tr><th colspan="7" class="month">January 2023</th></tr>
<tr><th class="sun">Sun</th><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></tr>
<tr><td class="sun">1</td><td class="mon">2</td><td class="tue">3</td><td class="wed">4</td><td class="thu">5</td><td class="fri">6</td><td class="sat">7</td></tr>
<tr><td class="sun">8</td><td class="mon">9</td><td class="tue">10</td><td class="wed">11</td><td class="thu">12</td><td class="fri">13</td><td class="sat">14</td></tr>
<tr><td class="sun">15</td><td class="mon">16</td><td class="tue">17</td><td class="wed">18</td><td class="thu">19</td><td class="fri">20</td><td class="sat">21</td></tr>
<tr><td class="sun">22</td><td class="mon">23</td><td class="tue">24</td><td class="wed">25</td><td class="thu">26</td><td class="fri">27</td><td class="sat">28</td></tr>
<tr><td class="sun">29</td><td class="mon">30</td><td class="tue">31</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr>
</table>

【HTML出力】

January 2023
SunMonTueWedThuFriSat
1234567
891011121314
15161718192021
22232425262728
293031    

年間カレンダーをHTMLで取得する

年間カレンダーをHTMLで取得したい場合には、以下の例のようにformatyearを使用して表示したい年を指定します。

import calendar

# HTMLCalendarオブジェクトを生成
html_calendar = calendar.HTMLCalendar()

# 年間カレンダーをHTMLで取得
print(html_calendar.formatyear(2023))
【実行結果】
<table border="0" cellpadding="0" cellspacing="0" class="year">
<tr><th colspan="3" class="year">2023</th></tr><tr><td><table border="0" cellpadding="0" cellspacing="0" class="month">
<tr><th colspan="7" class="month">January</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="noday">&nbsp;</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><td class="sun">1</td></tr>
(...途中省略...)
<tr><td class="mon">18</td><td class="tue">19</td><td class="wed">20</td><td class="thu">21</td><td class="fri">22</td><td class="sat">23</td><td class="sun">24</td></tr>
<tr><td class="mon">25</td><td class="tue">26</td><td class="wed">27</td><td class="thu">28</td><td class="fri">29</td><td class="sat">30</td><td class="sun">31</td></tr>
</table>
</td></tr></table>

【HTML出力】

2023
January
MonTueWedThuFriSatSun
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
February
MonTueWedThuFriSatSun
  12345
6789101112
13141516171819
20212223242526
2728     
March
MonTueWedThuFriSatSun
  12345
6789101112
13141516171819
20212223242526
2728293031  
April
MonTueWedThuFriSatSun
     12
3456789
10111213141516
17181920212223
24252627282930
May
MonTueWedThuFriSatSun
1234567
891011121314
15161718192021
22232425262728
293031    
June
MonTueWedThuFriSatSun
   1234
567891011
12131415161718
19202122232425
2627282930  
July
MonTueWedThuFriSatSun
     12
3456789
10111213141516
17181920212223
24252627282930
31      
August
MonTueWedThuFriSatSun
 123456
78910111213
14151617181920
21222324252627
28293031   
September
MonTueWedThuFriSatSun
    123
45678910
11121314151617
18192021222324
252627282930 
October
MonTueWedThuFriSatSun
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
November
MonTueWedThuFriSatSun
  12345
6789101112
13141516171819
20212223242526
27282930   
December
MonTueWedThuFriSatSun
    123
45678910
11121314151617
18192021222324
25262728293031

年間カレンダーでHTMLで取得する(1行に出力する月数の指定)

年間カレンダーで1行に出力する月数を指定したい場合は、formatyearのwidth引数で指定します。以下はwidth=2とした場合の出力結果です。

import calendar

# HTMLCalendarオブジェクトを生成
html_calendar = calendar.HTMLCalendar()

# n年間カレンダーをHTMLで取得(1行に表示する月数を指定)
print(html_calendar.formatyear(2023, width=2))
【実行結果】
<table border="0" cellpadding="0" cellspacing="0" class="year">
<tr><th colspan="2" class="year">2023</th></tr><tr><td><table border="0" cellpadding="0" cellspacing="0" class="month">
<tr><th colspan="7" class="month">January</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="noday">&nbsp;</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><td class="sun">1</td></tr>
(...途中省略...)
<tr><td class="mon">18</td><td class="tue">19</td><td class="wed">20</td><td class="thu">21</td><td class="fri">22</td><td class="sat">23</td><td class="sun">24</td></tr>
<tr><td class="mon">25</td><td class="tue">26</td><td class="wed">27</td><td class="thu">28</td><td class="fri">29</td><td class="sat">30</td><td class="sun">31</td></tr>
</table>
</td></tr></table>

【HTML出力】

2023
January
MonTueWedThuFriSatSun
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
February
MonTueWedThuFriSatSun
  12345
6789101112
13141516171819
20212223242526
2728     
March
MonTueWedThuFriSatSun
  12345
6789101112
13141516171819
20212223242526
2728293031  
April
MonTueWedThuFriSatSun
     12
3456789
10111213141516
17181920212223
24252627282930
May
MonTueWedThuFriSatSun
1234567
891011121314
15161718192021
22232425262728
293031    
June
MonTueWedThuFriSatSun
   1234
567891011
12131415161718
19202122232425
2627282930  
July
MonTueWedThuFriSatSun
     12
3456789
10111213141516
17181920212223
24252627282930
31      
August
MonTueWedThuFriSatSun
 123456
78910111213
14151617181920
21222324252627
28293031   
September
MonTueWedThuFriSatSun
    123
45678910
11121314151617
18192021222324
252627282930 
October
MonTueWedThuFriSatSun
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
November
MonTueWedThuFriSatSun
  12345
6789101112
13141516171819
20212223242526
27282930   
December
MonTueWedThuFriSatSun
    123
45678910
11121314151617
18192021222324
25262728293031

CSSクラスの設定方法

上記のHTML出力結果を見ていただくと分かりますが、HTMLにおいて各曜日にCSSクラスが設定されています。CSSクラスは、HTMLCalendarのcssclassesにリストで格納されています。

以下の例のように、cssclassに新しいリストを代入することで、必要に応じてCSSクラスの設定を変更することが可能です。また、Python 3.7からは、cssclass_month、cssclass_month、cssclass_noday等のように「年」、「月」、「日」が存在しないといったものも追加され、これらの値も変更可能となっています。

import calendar

# HTMLCalendarオブジェクトを生成
html_calendar = calendar.HTMLCalendar()

# CSSクラスを取得
print(html_calendar.cssclasses)
# python3.7から用意されたCSSクラス名
print(html_calendar.cssclass_year)
print(html_calendar.cssclass_month)
print(html_calendar.cssclass_noday, "\n")

# CSSクラスを設定
html_calendar.cssclasses = [
    "mon",
    "tue",
    "wed",
    "thu_1",
    "fri_1",
    "sat_1",
    "sun_1",
]

# 月間カレンダーをHTMLで取得
print(html_calendar.formatyear(2023))
【実行結果】
['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun']
year
month
noday 

<table border="0" cellpadding="0" cellspacing="0" class="year">
<tr><th colspan="3" class="year">2023</th></tr><tr><td><table border="0" cellpadding="0" cellspacing="0" class="month">
<tr><th colspan="7" class="month">January</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="noday">&nbsp;</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><td class="sun_1">1</td></tr>
<tr><td class="mon">2</td><td class="tue">3</td><td class="wed">4</td><td class="thu_1">5</td><td class="fri_1">6</td><td class="sat_1">7</td><td class="sun_1">8</td></tr>
<tr><td class="mon">9</td><td class="tue">10</td><td class="wed">11</td><td class="thu_1">12</td><td class="fri_1">13</td><td class="sat_1">14</td><td class="sun_1">15</td></tr>
<tr><td class="mon">16</td><td class="tue">17</td><td class="wed">18</td><td class="thu_1">19</td><td class="fri_1">20</td><td class="sat_1">21</td><td class="sun_1">22</td></tr>
<tr><td class="mon">23</td><td class="tue">24</td><td class="wed">25</td><td class="thu_1">26</td><td class="fri_1">27</td><td class="sat_1">28</td><td class="sun_1">29</td></tr>
<tr><td class="mon">30</td><td class="tue">31</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>
(...省略...)

公式ドキュメントでのCSSクラス設定例

公式ドキュメントのこちらにHTMLCalendarを継承したカスタムカレンダーとしてCSSクラス名を設定する例があったので簡単に紹介します。

以下の例では、HTMLCalendarを継承したCustomHTMLCalを作成し、cssclasses等をオーバーライドしています。

import calendar


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"


if __name__ == "__main__":
    # カスタムHTMLCalendarオブジェクトを生成
    custom_html_calendar = CustomHTMLCal()

    # 月間カレンダーをHTMLで取得
    print(custom_html_calendar.formatmonth(2023, 1))
【実行結果】
<table border="0" cellpadding="0" cellspacing="0" class="text-center month">
<tr><th colspan="7" class="text-center month-head">January 2023</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="noday">&nbsp;</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><td class="sun text-nowrap">1</td></tr>
<tr><td class="mon text-nowrap">2</td><td class="tue text-nowrap">3</td><td class="wed text-nowrap">4</td><td class="thu text-nowrap">5</td><td class="fri text-nowrap">6</td><td class="sat text-nowrap">7</td><td class="sun text-nowrap">8</td></tr>
<tr><td class="mon text-nowrap">9</td><td class="tue text-nowrap">10</td><td class="wed text-nowrap">11</td><td class="thu text-nowrap">12</td><td class="fri text-nowrap">13</td><td class="sat text-nowrap">14</td><td class="sun text-nowrap">15</td></tr>
<tr><td class="mon text-nowrap">16</td><td class="tue text-nowrap">17</td><td class="wed text-nowrap">18</td><td class="thu text-nowrap">19</td><td class="fri text-nowrap">20</td><td class="sat text-nowrap">21</td><td class="sun text-nowrap">22</td></tr>
<tr><td class="mon text-nowrap">23</td><td class="tue text-nowrap">24</td><td class="wed text-nowrap">25</td><td class="thu text-nowrap">26</td><td class="fri text-nowrap">27</td><td class="sat text-nowrap">28</td><td class="sun text-nowrap">29</td></tr>
<tr><td class="mon text-nowrap">30</td><td class="tue text-nowrap">31</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>

閏年の判定に関する処理

calendarモジュールは、閏年の判定に関する処理もあります。

閏年かどうかを判定する isleap

対象の年が閏年かどうかを判定するにはisleap関数を使用します。

import calendar

# 閏年を判定する
print(calendar.isleap(2020))
print(calendar.isleap(2022))
【実行結果】
True
False

閏年の場合はTrueが、閏年ではない場合はFalseが返却されます。

指定した期間の閏年の回数を計算する leapdays

指定した年の範囲の中で何回閏年であったかの回数を計算するには、leapdays関数を使用します。

import calendar

# 閏年の回数を調べる
print(calendar.leapdays(2000, 2022))
【実行結果】
6

2000年から2022年までの間で閏年なのは「2000年」「2004年」「2008年」「2012年」「2016年」「2020年」の6回です。上記のように指定期間内の閏年の回数が取得できていることが分かります。

まとめ

Pythonでカレンダーを生成するためのcalendarモジュールの使い方の基本について解説しました。

calendarモジュールは手軽にカレンダーを作るのにとても便利ですので、是非使い方を覚えてもらえたらなと思います。

Note

calendarモジュールの公式ドキュメントはこちらを参照してください。