以前の日記で、閏年の判定規則について書いたが、ある年が閏年かどうか、プログラム上で判定するにはどうすればいいのか。
いくつかの言語では、閏年を判定するために、IsLeapYear あるいは isLeapYear という名前の関数・メソッドが提供されている。しかし、例えば VBScript にはそういうものがないので、自作することになる。
Function IsLeapYear(intYear) IsLeapYear = (intYear Mod 4 = 0 And intYear Mod 100 <> 0) Or intYear Mod 400 = 0 'IsLeapYear = IsDate(intYear & "/02/29") 'IsLeapYear = (Day(DateSerial(intYear, 2, 29)) = 29) 'IsLeapYear = (Month(DateSerial(intYear, 2, 29)) = 2) 'IsLeapYear = (DateDiff("d", DateSerial(intYear, 2, 28), DateSerial(intYear, 3, 1)) = 2) End Function
上のコードでは、5 パターンの実装を書いてみた。最初の 1 つはまともに計算するもので、コメントアウトしてある残り 4 つは、VBScript と Windows が提供している日付処理機能を利用している。
計測したわけじゃないけど、速度的には最初のがベストだと思う。2 番目のは見た目にはわかりやすいが、速度は出なさそう。3 番目と 4 番目は、DateSerial(閏年でない年, 2, 29)
がその年の 3 月 1 日になることを利用したもの。5 番目は、2 月 28 日と 3 月 1 日の日数差が 1 日か 2 日かで判定している。