CALENDAR(3)

名称
easterg, easterog, easteroj, gdate, jdate, ndaysg, ndaysj, week, weekday - 西暦での日付けの演算

ライブラリ
libcalendar

書式
#include <calendar.h> struct date * easterg(int year, struct date *dt) struct date * easterog(int year, struct date *dt) struct date * easteroj(int year, struct date *dt) struct date * gdate(int nd, struct date *dt) struct date * jdate(int nd, struct date *dt) int ndaysg(struct date *dt) int ndaysj(struct date *dt) int week(int nd, int *year) int weekday(int nd)

解説
これらの関数は、西暦 0 年 (すなわち B.C. 1 年) 3 月 1 日 から西暦 100000 年までの 広範囲の年月のカレンダを演算します。

プログラムは -lcalendar とリンクさせる必要があります。

関数 easterg(), easterog() および easteroj() は、 Easter Sunday (復活祭の日曜日) の日付けを、 dt で指定した構造体に保存し、 この構造体のポインタを返します。 関数 easterg() は、グレゴリオ暦 (1582 年以降に西ヨーロッパのほとんどのキリスト教会で採用された) を仮定し、 関数 easterog() および easteroj() は、正統派 (1582 年以前の西ヨーロッパ教会、および今日まで続く ギリシャ正教会、ロシア正教会などいわゆる東方正教会) の規則に従って、 Easter Sunday の日付けを演算します。 その結果、 easterog() はグレゴリオ暦(現行太陽暦)を返し、 easteroj() はユリウス暦(旧太陽暦)を返します。

関数 gdate(), jdate(), ndaysg() および ndaysj() は、日付けの "年、月、日" という一般表記と、より演算に適した "日数" 表現の相互変換を行います。 B.C. 1 年 3 月 1 日をゼロとして、 以降の経過日に順番に番号が振られます。 すなわちこの日番号は、 B.C. 1 年 3 月 1 日からその日までの経過日数を示します。 変換は、正数の日番号に対してだけ機能します。

gdate() および jdate() 関数は、日番号 nd に対応する日付けを dt で指定した構造体に保存し、その構造体のポインタを返します。

ndaysg() および ndaysj() 関数は、 dt で指定した日付けの日番号を返します。

gdate() および ndaysg() 関数は、1582 年 10 月 4 日以降のグレゴリオ暦および、 以前のユリウス暦を仮定しますが、 一方、 jdate() および ndaysj() は一貫してユリウス暦だけを仮定します。

これら 2 つの暦ではうるう年の定義が違います。 ユリウス暦では 4 の倍数の年はすべてうるう年ですが、 グレゴリオ暦ではそのうちの 100 の倍数で、400 の 倍数ではない年を除きます。 すなわち、1700, 1800, 1900, 2100 年はうるう年ではなく、 2000 年はうるう年になります。 この新たな規則は、1582 年 10 月 4 日に、 同日以降の 10 日を削除することで開始されました。 カトリック国家のほとんどは、 16 世紀末までにこの新暦を採用しましたが、 一方、20 世紀までなおユリウス暦にとどまる国々もありました。 英国とその植民地が新暦に切り替えたのは、1752 年 9 月 2 日でしたが、 その時点ではすでに 11 日を削除する必要がありました。

関数 week() は、 nd で指定された日番号の日付けが含まれる週番号を返します。 引数 *year は、その週 (の半分以上) が含まれる年に設定されます。 週番号は、各年の 3 日以上が含まれる第 1 週を 1 として、 順番に振られます。 週は月曜日から始まります。 この関数はグレゴリオ暦だけに定義されます。

関数 weekday() は、 nd で指定された日番号の日付けの曜日 (月曜 = 0 … 日曜 = 6) を返します。

構造体 date は <calendar.h> 内で定義されています。次のフィールドを 含みます。

    int y;		/* year (0000 - ????) */
    int m;		/* month (1 - 12) */
    int d;		/* day of month (1 - 31) */

0 年は歴史家の手では "1 B.C." と書かれますが、天文学者とこのライブラリでは "0" と表記されます。

関連項目
ncal(1), strftime(3)

規格
週番号は ISO 8601: 1988 に適合しています。

歴史
calendar ライブラリは FreeBSD 3.0 ではじめて登場しました。

作者
このマニュアルページとライブラリは、 Wolfgang Helbig <helbig@FreeBSD.org> によって書かれました。

バグ
このライブラリはきわめて慎重にコーディングされたので、 残されたバグはありません。