Pythonでカレンダーを生成するためのcalendarモジュールの使い方の基本について解説します。
Contents
カレンダーを生成する ~ 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"> </td><td class="noday"> </td><td class="noday"> </td><td class="noday"> </td><td class="noday"> </td><td class="noday"> </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"> </td><td class="noday"> </td><td class="noday"> </td><td class="noday"> </td><td class="noday"> </td></tr> </table>
【HTML出力】
January 2023 | ||||||
---|---|---|---|---|---|---|
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 |
月間カレンダーを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"> </td><td class="noday"> </td><td class="noday"> </td><td class="noday"> </td></tr> </table>
【HTML出力】
January 2023 | ||||||
---|---|---|---|---|---|---|
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 |
年間カレンダーを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"> </td><td class="noday"> </td><td class="noday"> </td><td class="noday"> </td><td class="noday"> </td><td class="noday"> </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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
年間カレンダーで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"> </td><td class="noday"> </td><td class="noday"> </td><td class="noday"> </td><td class="noday"> </td><td class="noday"> </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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
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"> </td><td class="noday"> </td><td class="noday"> </td><td class="noday"> </td><td class="noday"> </td><td class="noday"> </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"> </td><td class="noday"> </td><td class="noday"> </td><td class="noday"> </td><td class="noday"> </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"> </td><td class="noday"> </td><td class="noday"> </td><td class="noday"> </td><td class="noday"> </td><td class="noday"> </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"> </td><td class="noday"> </td><td class="noday"> </td><td class="noday"> </td><td class="noday"> </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モジュールは手軽にカレンダーを作るのにとても便利ですので、是非使い方を覚えてもらえたらなと思います。
calendarモジュールの公式ドキュメントはこちらを参照してください。
上記で紹介しているソースコードについてはgithubにて公開しています。参考にしていただければと思います。