とあるエンジニアの闇歴史帳

コピペで使える便利Wiki ※現在構築中です。

ユーザ用ツール


perl:calendar_leapyear

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

perl:calendar_leapyear [2017/12/14 20:18]
perl:calendar_leapyear [2020/06/23 14:10] (現在)
行 1: 行 1:
 +====== 閏年か判定する - Perl ======
 +~~socialite~~
 +<note important>この記事は2007年02月19日に書かれたものです。</note>
 +
 +約4年に一度、2月29日が発生する閏年(うるうどし)かどうかを判定するには、次のロジックを素直に実装すれば良い。
 +
 +  * 4で割り切れる年は閏年
 +  * ただし、100で割り切れる年は閏年ではない
 +  * しかし、400で割り切れる年は閏年である
 +
 +isLeap関数(サブルーチン)に西暦の年数を渡すと真偽値を返す。
 +
 +
 +===== サンプル =====
 +<code perl>
 +;#
 +;#閏年の判定
 +;#
 +
 +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))
 +    );
 +}
 +</code>
 +
 +結果は次のような感じになる。画面上には真偽値がそのまま表示されるため、大抵の環境では「ブランク」「1」「1」などとなるハズだ。
 +
 +  = 1000年 not 閏年 : 100で割り切れるため
 +
 +  = 2000年 閏年 : 100で割り切れるが、400で割れるため
 +
 +  = 2004年 閏年 : 100で割り切れず、4で割り切れるため
 +
 +isLeapは次のように、そのままif文などに組み込めば良い。
 +
 +<code perl>
 +if(isLeap($year)){print "$yearは閏年です";}
 +</code>
 +
 +余談になるが、「Leap」は本来、次のような意味がある。
 +> leap
 +> 【名】 跳躍{ちょうやく}、飛躍{ひやく}、躍進{やくしん}、急激{きゅうげき}な変化{へんか}、急上昇{きゅうじょうしょう}、急増{きゅうぞう}
 +> 【自動-1】 ピョンと飛ぶ、飛び跳ねる、跳ぶ、飛び越える◆jump では跳躍の「動作」に、leap では跳躍による「移動」に重点が置かれる
 +> ~英辞郎より引用
 +
 +「leap day」で「うるう年」となる。
 +===== 関連書籍 =====
 +{{amazon>jp:4797336803}}
 +<html><p style="clear:both"></p></html>
 +
 +{{amazon>jp:4798139815}}
 +<html><p style="clear:both"></p></html>
 +
 +{{amazon>jp:B00O8GIL62}}
 +<html><p style="clear:both"></p></html>
 +
 +{{tag>CGI・Perl例文集 Perl カレンダー 日付 閏年}}
 +~~socialite~~
  

関連ページ