■曜日判定・閏年判定のアルゴリズムと月末テーブル■


 ■メインフレームのCOBOLなどでのコーディングアルゴリズム

月末テーブル

1月2月3月4月5月6月7月8月9月10月11月12月
index01234567891011
閏年312931303130313130313031
閏年以外312831303130313130313031

閏年判定

; 定義

YYYY: 西暦年

; アルゴリズム
function 閏年判定(YYYY) if mod(YYYY,400) = 0 then return "閏年" else if mod(YYYY,100) = 0 then return "閏年以外" else if mod(YYYY,4) = 0 then return "閏年" else return "閏年以外" end if end if end if end function

※ただし、さらに精密に計算すると、3300年に1回1日余るのだが、その時の対応はまだ決まっていないのは企業の商品・顧客管理システムの開発と同様である。

曜日判定〜ツェラーの公式


ユリウス暦からグレゴリオ暦に変更されたのは、西暦1582年10月15日(金)から(ちなみにその前日は10月4日木曜日)であることから、その日を起点に閏年の調整をしながら求めたい日までの通算日数を算出し、7を法とした剰余を求めればその日の曜日が判明するということになる。
西暦hhyy年m月d日の曜日wを求める。(ただし、1月、2月の場合は、「前年の13月」「前年の14月」として計算する。また、1582年10月15日以降の日付に適用する。)

w = mod(yy + int(yy/4) + int(hh/4) - 2hh + int(13(m + 1)/5) + d, 7)

yyは100年未満の年数、int(yy/4)は閏年の1日、int(hh/4)は400年に1回の閏年。dは端数日数。4年に1回、400年に4回数え過ぎのため、残りの式で調整していると考えられる(証明は別途検索してください。)。

w0123456
曜日

★暦と星  暦は土曜日から始まる。曜日が『土日月火水木金』の順番になった理由とは?

; アルゴリズム
function 曜日判定(y, m, d) if (m == 1) || (m == 2) then y-- m += 12 end if hh = int(y / 100) yy = mod(y, 100) w = mod(yy + int(yy / 4) + int(hh / 4) - 2 * hh + int(13 * (m + 1) / 5) + d, 7) return w end function
; (c)2008/5/21 chu

戻る