- 2010/11/15 月曜日 18:11:18
- perl
日本の休日には「国民の祝日」と「振替休日」と「国民の休日」ってのがあるのですがそれをPerlから求めるにはどうしたらいいんだという話。
#perl-casualでたずねたところいろいろと方法を教えてもらいました。
定番ネタだし、それ三週目といわれたりしたのでまとめてみますたという流れ。
そもそも休日というのは法律で決められるものなので、改正もあり最近だと2005年に改正があったりしています。
また、「国民の祝日」の中には「春分の日」や「秋分の日」のように翌年分を2月に官報で発表なんてものもあったりします。
やっかいですね。
CPANモジュールを使う
Calendar::Japanese::Holiday
最終更新日が2007年なようですが
use Calendar::Japanese::Holiday; say isHoliday(2011, 3, 21); say isHoliday(2011, 9, 23);
こんな感じで未来の秋分・春分の日も計算で求められているのでそれなりに信頼感はあるかと思います。
ただし、「振替休日」に関しては下記のように第三引数に1をいれないと求めてくれないので注意。
use Calendar::Japanese::Holiday; say isHoliday(2009, 5, 6); # これだと駄目 say isHoliday(2009, 5, 6, 1); # これならOK
DateTime::Holiday::Japanese
CPANモジュールではないですが、coderepos上にfbisさん作のモジュールもあがっています。
use DateTime::Holiday::Japanese qw/is_holiday/; say is_holiday(year => 2011, month => 3, day => 21); say is_holiday(year => 2011, month => 9, day => 23);
Calendar::Japanese::Holidayと同様に更新は2007年からされていないようですが秋分春分の日は計算で出しています。
今日2009-2011のテストデータを追加してパスするのは確認しています。coderepos上にあるので法律変わったら誰かが更新してくれるんじゃないかという期待感あり。DateTime依存。
ネット経由で情報を定期的にとってくる
Google Calendar Data API
japanese@holiday.calendar.google.com
=> 「振替休日」「国民の休日」には非対応(「国民の祝日」カレンダーだからそれが正しいんだよ派)
outid3el0qkcrsuf89fltf7a4qbacgt9@import.calendar.google.com
=> 「振替休日」「国民の休日」にも対応。使えそう
https://www.mozilla.org/projects/calendar/holidays.htmlのJapan Holidaysと同じデータぽいのかな。
政府
「国民の祝日」についてが一番信頼できそうなネット上の情報な気もするが、別にこのページを維持すること自体を法律で定めているわけでもないし今年と来年のデータしかないのでそこまで使えるってわけでもない。「振替休日」と「国民の休日」については例だけなので将来的にどう表示されるのかも判然としない。
目視確認なら法律と官報を確認するに次いで信頼性はあるかと。
休日DBを独自に作成して運用者がメンテ
最強
まとめ
CPANモジュールの”その時点での法律計算”系は手軽さはあるが、今後の法改正を見越すと若干難ありか。
モジュール自体が毎年来年分のテストを追加してリリースされることが保障されていて、
使う側も毎年保守ができるのであれば特に問題はなさそう。
さらにモジュール自体もgithubなんかで複数人で保守されているといいなという話。
API系は信頼できるものを政府が出してくれるとうれしいなーというところ。
コメント:0
トラックバック:0
- この記事のトラックバック URL
- https://blog.everqueue.com/chiba/2010/11/15/464/trackback/
- トラックバックの送信元リスト
- 日本の休日をPerlから求める - へぼい日記 より