PROGRAM PYTHON

初心者のためのPython超入門【第25回 カレンダー②~Calendarクラス】

 

 

カレンダークラスのオブジェクトを作ろう

今回はカレンダークラスのオブジェクトを作って、その中からいくつかメソッドを使ってみましょう。
カレンダーオブジェクトを作るために、calendarライブラリーをインポートしておきます。

 実行例
>>> import calendar

 

カレンダーオブジェクトを作成する

カレンダーオブジェクトの作り方は、以下のようになります。
オプションのfirstweekdayは、週の始まりの曜日を数字で指定します。
月曜日が0(デフォルト)、火曜日が1、水曜日は2となり、日曜日は6になります。

オブジェクト = calendar.Calendar(firstweekday=曜日)

以下の実行例は、週の始まりを日曜日としてカレンダーオブジェクトを作成しています。

 実行例
>>> cl = calendar.Calendar(firstweekday=6)

 

曜日の数字を一週間分生成する

iterweekdays()メソッドは、曜日の数字(月曜日は0、日曜日は6など)を1週間分生成します。
このメソッドの戻り値は、数字のイテレーターになります。

オブジェクト.iterweekdays()

週の始めの数字は、オブジェクトを作成した時のfirstweekdayオプションの値になります。
以下の例では、firstweekdayに6を指定してオブジェクトを作成しています。
戻り値をリスト形式で画面に表示するには、list()関数を使います。

 実行例
>>> list(cl.iterweekdays())
[6, 0, 1, 2, 3, 4, 5]

 

指定した年月の日にちを生成する

itermonthdays()メソッドは、指定した年月の日にちを一か月分生成します。
このメソッドの戻り値は、数字のイテレーターになります。
イテレーターの先頭の曜日は、オブジェクトを作成した時にfirstweekdayで指定した値になり、その月の前後で欠けた日にちには0が割り当てられます。

オブジェクト.itermonthdays(, )

以下の例では、firstweekdayに6を指定してオブジェクトを作成しています。
戻り値をリスト形式で画面に表示するには、list()関数を使います。
2021年6月の1日は火曜日なので、その前の日曜日と月曜日には0が当てられ、最終日の30日は水曜日なので、木曜日から土曜日にも0が当てられています。

 実行例
>>> list(cl.itermonthdays(2021, 6))
[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, 0, 0, 0]

 

指定した年月の週のリストを生成する

monthdayscalendar()メソッドは、指定した年月の日にちの一か月分を週単位で生成します。
このメソッドの戻り値は、指定した年月を週を単位とした2次元配列で返します。
週毎に日にちを抜き出したい場合に便利です。

オブジェクト.monthdayscalendar(, )

以下の例では、firstweekdayに6を指定してオブジェクトを作成しています。
戻り値は2次元配列なので、list()関数を使う必要はありません

 実行例
>>> cl.monthdayscalendar(2021, 6)
[[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, 0, 0, 0]]

配列のイメージは、以下のようになります。

pythonstart25-1

メモ

週の数は月によって変わります。
少ない月で4週、多い月で6週です。

 

指定した年のデータを整形に向く形で生成する

yeardayscalendar()メソッドは、指定した年を整形に向く形で生成します。
指定した月数毎に配列としてまとめるので、戻り値は3次元配列になります。
widthはオプションで、デフォルトは3です。

オブジェクト.yeardayscalendar(, [width=月数])

以下の例では、firstweekdayに6を指定してオブジェクトを作成しています。
戻り値は3次元配列なので、list()関数を使う必要はありません

 実行例
>>> cl.yeardayscalendar(2021)
[[[[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, 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, 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, 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, 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, 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, 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, 29, 30, 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, 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, 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, 0]]]]

配列のイメージは、以下のようになります。

pythonstart25-2

widthオプションを4にすると、4か月ごとの配列になります。

pythonstart25-3

 

Calenarクラスのより詳しい使い方は、以下の公式サイトを参照してください。

 

-PROGRAM, PYTHON
-