Perl 祝日名の取得
Calendar::Japanese::Holiday
Calendar::Japanese::Holidayは祝日の一覧取得、祝日判定、祝日名の取得ができるPerl モジュールです。
CPANにアップ済。
概要
このモジュールで以下のことを行えます。
- 指定年月の祝日一覧の取得
- 指定日の祝日判定
祝日判定で祝日だった場合は、祝日名を返すので祝日名の取得もできます。
使用例
use Calendar::Japanese::Holiday;
# 祝日一覧の取得
$holidays = getHolidays(2008, 5);
$holidays = getHolidays(2008, 5, 1);
# 祝日かどうかの判定
$name = isHoliday(2007, 5, 5);
関数
- getHolidays($year, $month [, $furikae])
$holidays = getHolidays(2008, 5);
返された$holidaysの内容:
$holidays = {
'4' => "みどりの日",
'3' => "憲法記念日",
'5' => "こどもの日"
};
$holidays = getHolidays(2008, 5, 1); 返された$holidaysの内容: $holidays = { '6' => "振替", '4' => "みどりの日", '3' => "憲法記念日", '5' => "こどもの日" };
- isHoliday($year, $month, $day [, $furikae])
指定した日が祝日かどうかを調べます。祝日の場合は祝日名を返します。祝日でなければ、undefを返します。
$furikaeはgetHolidays()と同じで、真を指定すると振替休日となる日についても祝日と判定するようになります("振替"が返る)。
$name = isHoliday(2007, 5, 5);
返された$nameの内容
$name = "こどもの日"
その他
祝日はその年に応じて移動したりする場合がありますが、本モジュールではこれらの情報も正しく返します。
例えば4月29日は1989〜2006年までは「みどりの日」でしたが、2007年からは「昭和の日」となりました(「みどりの日」は5月4日に移動)。これらの情報を正しく取得できるか、以下のスクリプトで試してみます。
use Calendar::Japanese::Holiday;
use open OUT => ":utf8";
use open ":std";
print "2006/4/29: ".isHoliday(2006, 4, 29), "\n";
print "2007/4/29: ".isHoliday(2007, 4, 29), "\n";
print "2007/5/4: ".isHoliday(2007, 5, 4), "\n";
上記のスクリプトを実行すると、以下のように年に応じた祝日名を取得できているのがわかります。
2006/4/29: みどりの日
2007/4/29: 昭和の日
2007/5/4: みどりの日
簡易サンプル
カレンダー表示をする簡易サンプル。
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use Encode;
use Time::Local;
use Calendar::Japanese::Holiday;
my ($year, $mon) = (2007, 5);
my $start = 1 - (localtime(timelocal(0, 0, 0, 1, $mon - 1, $year)))[6];
my @holidays;
foreach my $day ($start .. Calendar::Japanese::Holiday::days_in_month($year, $mon)) {
printf("%2s ", $day >= 1 ? $day : ' ');
push @holidays, (isHoliday($year, $mon, $day) or "");
if (@holidays >= 7) {
print "\n";
print Encode::encode("utf8", $_."\x{3000}" x (6 - length $_))
foreach (@holidays);
print "\n";
@holidays = ();
}
}
print "\n";
上記のスクリプトを実行すると、以下のようなカレンダーが表示される。
1 2 3 4 5
憲法記念日 みどりの日 こどもの日
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
変更履歴
0.06
引数の型が文字列の場合に正常動作しないのを修正
例: isHoliday('2019', '02', '11')
Yuki Yoshidaさんご指摘ありがとうございます。
0.05
2019-2021年の祝日に対応
- 2019年は主に天皇即位に関する祝日の変更への対応
- 2020年は主にオリンピックに関連しての祝日の変更への対応
最近のバージョンのPerlでwarningが出るようになっていたのを修正
修正版/パッチをご提供いただいたyamamoto/melonsodeさんありがとうございました。
CPANのissueでご連絡パッチをご提供いただいたnipotanさんもありがとうございます。
0.04
山の日に対応
0.03
以下の祝日をサポート
- 1959年4月10日 - 皇太子明仁親王の結婚の儀
- 1989年2月24日 - 昭和天皇の大喪の礼
- 1990年11月12日 - 即位礼正殿の儀
- 1993年6月9日 - 皇太子徳仁親王の結婚の儀
0.02
0.01
初版リリース
github
https://github.com/kztomita/Calendar-Japanese-Holiday にリポジトリをアップしました。差分等を確認したい場合は、こちらからご確認ください。
Subversionからのコンバートやその他の事情のため、v0.03以降のみとなります。