# 5.17 `calendar` -- 一般的なカレンダーに関する関数群

このモジュールはUnixのcalプログラムのようなカレンダー出力を 行い、それに加えてカレンダーに関する有益な関数群を提供します。標準ではこ れらのカレンダーは（ヨーロッパの慣例に従って）月曜日を週の始まりとし、日 曜日を最後の日としています。 `setfirstweekday()`を用いることで、日曜日(6)や他の曜日を週の始 まりに設定することができます。日付を表す引数は整数値で与えます。

このモジュールで提供する関数のほとんどは `datetime` に依存しており、 過去も未来も現代のグレゴリオ暦を利用します。この方式はDershowitzとReingold の書籍「Calendrical Calculations」にあるproleptic Gregorian暦に一致しており、 同書では全ての計算の基礎となる暦としています。

`setfirstweekday`( | weekday)

  週の最初の曜日(`0`は月曜日, `6`は日曜日)を設定します。定数 `MONDAY`, `TUESDAY`, `WEDNESDAY`,`THURSDAY`, `FRIDAY`, `SATURDAY`及び`SUNDAY` は便宜上提供されています。 例えば、日曜日を週の開始日に設定するとき:

      import calendar
      calendar.setfirstweekday(calendar.SUNDAY)

  バージョン2.0 以降で新規追加された 仕様です。

`firstweekday`( | )

  現在設定されている週の最初の曜日を返します。 バージョン2.0 以降で新規追加された 仕様です。

`isleap`( | year)

  yearが閏年なら`1`を、そうでなければ`0`を返します。

`leapdays`( | y1, y2)

  範囲(y1...y2)指定された期間の閏年の回数を返します。 ここでy1やy2は年を表します。 バージョン2.0 以降で変更された 仕様: Python 1.5.2では、この関数は世紀をまたがった範囲では動作 しません。

`weekday`( | year, month, day)

  year(`1970`-...), month (`1`-`12`), day(`1`-`31`)で与えられた日の曜日(`0`は月曜日)を 返します。

`weekheader`( | n)

  曜日の短縮名の入ったヘッダを返します。n には個々の曜日を 表す文字列の長さを指定します。

`monthrange`( | year, month)

  yearとmonthで指定された月の一日の曜日と日数を返します。

`monthcalendar`( | year, month)

  月のカレンダーを行列で返します。各行が週を表し、月の範囲外の日は0になり ます。 それぞれの週は`setfirstweekday()`で設定をしていない限り月曜日か ら始まります。

`prmonth`( | theyear, themonth[, w[, l]])

  `month()`関数によって返される月のカレンダーを出力します。

`month`( | theyear, themonth[, w[, l]])

  月のカレンダーを複数行の文字列で返します。wにより日の列幅を変える ことができ、それらはセンタリングされます。lにより各週の表示される 行数を変えることができます。週の最初の曜日は `setfirstweekday()`関数の設定に依存します。 バージョン2.0 以降で新規追加された 仕様です。

`prcal`( | year[, w[, l[c]]])

  `calendar()`関数で返される一年間のカレンダーを出力します。

`calendar`( | year[, w[, l[c]]])

  3列からなる一年間のカレンダーを複数行の文字列で返します。任意の引数 w,l, 及びcはそれぞれ、日付列の表示幅、各週の行数及び 月と月の間のスペースの数を変更するためのものです。週の最初の曜日は `setfirstweekday()`関数の設定に依存します。出力されるカレンダー の起点となる年はプラットフォームに依存します。 バージョン2.0 以降で新規追加された 仕様です。

`timegm`( | tuple)

  関連はありませんが便利な関数で、`time`モジュールの `gmtime()`関数の戻値のような時間のタプルを受け取り、 1970年を 起点とし、POSIX規格のエンコードによるUnixのタイムスタンプに相当する 値を返します。実際、`time.gmtime()`と`timegm()`は反対 の動作をします。 バージョン2.0 以降で新規追加された 仕様です。

参考資料:

`time`モジュール:
  低レベルの時間に関連した関数群。.