Zellerの公式

読み:ツェラーのこうしき
品詞:名詞

閏年の規則を一つの公式としたもので、4で割り切れれば閏年、ただし100で割り切れて400では割り切れない年は平年、というもの。これは地球の公転周期の有理数近似365.2422 365 + 1/4 − 1/100 + 1/400より求めた式である。

現在使われている "グレゴリオ暦" は1582年10月15日(金曜日)より開始されており、その前日は "ユリウス暦" の1582年10月4日(木曜日)である。またユリウス暦の地球の公転周期は365 + 1/4で計算されていたために、この公式は使えない。公式の制限として1900年や2100年などは平年であるにも関らず、この式では閏年となってしまう。

この公式の特筆すべき点は、一年は3月から始まると仮定し、1・2月は前年の13・14月として計算するという点である。

実際のプログラムの例(C版)
/* 曜日の算出関数(C言語版)  0:日〜6:土 */
int iGetDateOfWeek (int iYear, int iMonth, int iDay)
{
    if ((iMonth == 1) || (iMonth == 2))
    {
        iYear--;
        iMonth += 12;
    }
    return (iYear + iYear/4 - iYear/100 + iYear/400 +
            (13 * iMonth + 8)/5 + iDay) % 7;
}
  
/* 閏年の判定関数(C言語版) 閏年なら 1 が返る */
int iChkLeapYear (int iYear)
{
    return (!(iYear%4)) && ((iYear%100) || (!(iYear%400)));
}
実際のプログラムの例(Perl版)
#!perl
sub iGetDateOfWeek {
    my ($iYear, $iMonth, $iDay) = @_;
    if(($iMonth == 1) || ($iMonth == 2)) {
        $iYear --;
        $iMonth += 12;
    }
    return ($iYear + int($iYear/4) - int($iYear/100) + 
        int($iYear/400) + int((13 * $iMonth + 8)/5) + $iDay) % 7;
}
sub iChkLeapYear {
    my ($iYear) = @_;
    return (!($iYear%4)) && (($iYear%100) || (!($iYear%400)));
}
#---- test program
print "Year?: "; $y = <>;
print "Month?: "; $m = <>;
print "Day?: "; $d = <>;
  
@week[(0..6)] = qw/Sun Mon Tue Wed Thu Fri Sat/;
print "iGetDateOfWeek:".$week[iGetDateOfWeek($y, $m, $d)]."\n";
print "iChkLeapYear:".(iChkLeapYear($y)?'うるう年':'平年')."\n";

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club