« 基数変換したい | メイン | 十二支の干支(えと)を求めたい »

カテゴリー:カレンダー(日付) 

閏年かどうか判定したい

このエントリーを含むはてなブックマーク  livedoorクリップ  閏年かどうか判定したいをdel.icio.usに追加  閏年かどうか判定したいをYahoo!ブックマークに追加  閏年かどうか判定したいをニフティクリップに追加

約4年に一度、2月29日が発生する閏年(うるうどし)かどうかを判定するには、次のロジックを素直に実装すれば良い。

  • 4で割り切れる年は閏年
  • ただし、100で割り切れる年は閏年ではない
  • しかし、400で割り切れる年は閏年である

isLeap関数(サブルーチン)に西暦の年数を渡すと真偽値を返す。

;#
;#閏年の判定
;#

print isLeap(1000), "\n";
print isLeap(2000), "\n";
print isLeap(2004), "\n";

#----------------------------------------------------
#■閏年の判定
#----------------------------------------------------

sub isLeap{
    my $year = shift;

    return(
        #-- 400で割り切れる年は閏年 --#
        (($year % 400) == 0 )
        or
        #-- 100で割り切れず、4で割れれば閏年 --#
        ((($year % 100) != 0) and (($year % 4) == 0))
    );
}

結果は次のような感じになる。画面上には真偽値がそのまま表示されるため、大抵の環境では「ブランク」「1」「1」などとなるハズだ。

1000年 not 閏年
 100で割り切れるため

2000年 閏年
 100で割り切れるが、400で割れるため

2004年 閏年
 100で割り切れず、4で割り切れるため


isLeapは次のように、そのままif文などに組み込めば良い。

if(isLeap($year)){print "$yearは閏年です";}

余談になるが、「Leap」は本来、次のような意味がある。

leap
【名】 跳躍{ちょうやく}、飛躍{ひやく}、躍進{やくしん}、急激{きゅうげき}な変化{へんか}、急上昇{きゅうじょうしょう}、急増{きゅうぞう}
【自動-1】 ピョンと飛ぶ、飛び跳ねる、跳ぶ、飛び越える◆jump では跳躍の「動作」に、leap では跳躍による「移動」に重点が置かれる

英辞郎より引用

「leap day」で「うるう年」となる。




トラックバック

このエントリーのトラックバックURL:
http://katsubemakito.net/mt/mt-tb.cgi/573

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

VPSレンタルサーバー




クリエイティブ・コモンズ・ライセンス
このブログは、次のライセンスで保護されています。 クリエイティブ・コモンズ・ライセンス.