とかく日本は祝日の多い国である。しかも祝日となる日付は毎年異なり、その法則も他国のように単純なものではない。
2007 年(平成 19 年)からは国民の祝日が合計 15 日となった。これは先進国では最多であり、「ワーカホリック」ともいわれる日本の意外な一面でもある。
http://ja.wikipedia.org/wiki/国民の祝日
Perl の場合
Perl で祝日判定を行うならば Calendar::Japanese::Holiday
モジュールが使いやすい。
Calendar::Japanese::Holiday – search.cpan.org
http://search.cpan.org/~kztomita/Calendar-Japanese-Holiday-0.03/lib/Calendar/Japanese/Holiday.pmPerl 祝日名の取得 – とみぞーノート
http://wiki.bit-hive.com/tomizoo/pg/Perl%20%BD%CB%C6%FC%CC%BE%A4%CE%BC%E8%C6%C0
インストールは次のコマンドを打つだけだ。
Windows(ActivePerl)の場合
C:\> ppm install Calendar::Japanese::Holiday
Linux、Mac OS X 等の場合
$ cpan -i Calendar::Japanese::Holiday
サンプル
#!/usr/bin/perl use utf8; use strict; use warnings; use feature qw! say !; use Calendar::Japanese::Holiday; use YAML; binmode STDOUT => ":utf8"; # 2009年5月の祝日一覧 say Dump getHolidays( 2009, 5 ); # 第3引数に真値を指定すると振替休日をも返す say Dump getHolidays( 2009, 5, 1 ); # 特別な祝日にも対応 say Dump getHolidays( 1993, 6 ); # 指定した年月日が祝日かどうかの判定 say isHoliday( 2010, 1, 1 ) // "祝日ではありません"; say isHoliday( 2010, 7, 7 ) // "祝日ではありません";
実行例
$ perl testHoliday.pl --- 3: 憲法記念日 4: みどりの日 5: こどもの日 --- 3: 憲法記念日 4: みどりの日 5: こどもの日 6: 振替 --- 9: 皇太子徳仁親王の結婚の儀 元日 祝日ではありません
getHolidays
関数は指定した年月に含まれる祝日のリストをハッシュリファレンスの形で返す。isHoliday
関数は指定した年月日の祝日であればその名を、そうでなければ未定義値を返す。
Python の場合
VBA 用のコードとして有名な祝日判定用マクロを Python に移植したスクリプトが使える1。
AddinBox(祝日マクロ)
http://www.h3.dion.ne.jp/~sakatsu/holiday_logic5.htm#Python
載せてあるスクリプトを jholiday.py
の名前で保存して使えばよい……のだが、そのままではうまく動かなかったので、スクリプトの 47 行目、225 行目を次のように修正した。
変更前
import datetime
print n.encode('euc-jp')
変更後
import datetime, math
print n
使用例
#!/usr/bin/env python #encoding:utf-8 import calendar, jholiday def _test1( y, m ): for d in xrange( calendar.monthrange( y, m )[1] ): n = jholiday.holiday_name( y, m, d + 1 ) if n: print "%d: %s" % ( d + 1, n ) def _test2( y, m, d ): n = jholiday.holiday_name( y, m, d ) if n: print n else: print u"祝日ではありません" # 2009年5月の祝日一覧 _test1( 2009, 5 ) print # 特別な祝日にも対応 _test1( 1993, 6 ) print # 指定した年月日が祝日かどうかの判定 _test2( 2010, 1, 1 ) _test2( 2010, 7, 7 )
実行例
C:\> python testHoliday.py 3: 憲法記念日 4: みどりの日 5: こどもの日 6: 振替休日 9: 皇太子徳仁親王の結婚の儀 元日 祝日ではありません
-
このページには Perl 用のスクリプトも存在するが、インストールやインターフェイスの簡便さ等の点で、前述の
Calendar::Japanese::Holiday
モジュールの方が優れている。 ↩