日本の祝日判定Rubyプログラム
特徴
- 1948年7月20日以降の日本の国民の祝日、振替休日、および国民の休日を計算して判定。
- スクリプトコード(holiday_japan.rb)は、祝日データを含めて200行弱とコンパクト。
(date2 の holiday.rb と比較して)
- 祝日をキャッシュすることにより、大量の日付について祝日判定する場合でも高速に動作
- 祝日名を返すことが可能
- 祝日のルールをテーブルで持つことにより、法改正による祝日変更への対応が容易
(holiday_jp と比較して)
- holiday_jp は日付をキーとする祝日データセットに基く。holiday_japan は祝日ルールに基き、照会された年ごとにデータセットを生成する。
インストール
-
RubyGems によるインストール
gem install holiday_japan -
または、holiday_japan.rb のスクリプトファイルを ruby のライブラリパスに置く
使い方
モジュールをロード
```ruby
require 'holiday_japan'
```
HolidayJapan モジュール関数
-
check(date)― Dateクラスのオブジェクトによる祝日判定HolidayJapan.check(Date.new(2021,3,20)) => true -
name(date)― 日付が祝日の場合は祝日名を返し、祝日でなければ nil を返す。HolidayJapan.name(Date.new(2021,3,20)) => "春分の日" -
print_year(year)― ある年の祝日一覧をプリント$ ruby -r holiday_japan -e 'HolidayJapan.print_year 2021' listing year 2021... 2021-01-01 Fri -
list_year(year)― ある年について、 [日付, 祝日名] のArrayを返すHolidayJapan.list_year(2021) => [[#<Date: 2021-01-01 ((2459216j,0s,0n),+0s,2299161j)>, "元日"], [#<Date: 2021-01-11 ((2459226j,0s,0n),+0s,2299161j)>, "成人の日"], [#<Date: 2021-02-11 ((2459257j,0s,0n),+0s,2299161j)>, "建国記念の日"], [#<Date: 2021-02-23 ((2459269j,0s,0n),+0s,2299161j)>, "天皇誕生日"], [#<Date: 2021-03-20 ((2459294j,0s,0n),+0s,2299161j)>, "春分の日"], [#<Date: 2021-04-29 ((2459334j,0s,0n),+0s,2299161j)>, "昭和の日"], [#<Date: 2021-05-03 ((2459338j,0s,0n),+0s,2299161j)>, "憲法記念日"], [#<Date: 2021-05-04 ((2459339j,0s,0n),+0s,2299161j)>, "みどりの日"], [#<Date: 2021-05-05 ((2459340j,0s,0n),+0s,2299161j)>, "こどもの日"], [#<Date: 2021-07-22 ((2459418j,0s,0n),+0s,2299161j)>, "海の日"], [#<Date: 2021-07-23 ((2459419j,0s,0n),+0s,2299161j)>, "スポーツの日"], [#<Date: 2021-08-08 ((2459435j,0s,0n),+0s,2299161j)>, "山の日"], [#<Date: 2021-08-09 ((2459436j,0s,0n),+0s,2299161j)>, "振替休日"], [#<Date: 2021-09-20 ((2459478j,0s,0n),+0s,2299161j)>, "敬老の日"], [#<Date: 2021-09-23 ((2459481j,0s,0n),+0s,2299161j)>, "秋分の日"], [#<Date: 2021-11-03 ((2459522j,0s,0n),+0s,2299161j)>, "文化の日"], [#<Date: 2021-11-23 ((2459542j,0s,0n),+0s,2299161j)>, "勤労感謝の日"]] -
hash_year(year)― ある年について、 日付=>祝日名 のHashを返すHolidayJapan.hash_year(2021) => {#<Date: 2021-01-01 ((2459216j,0s,0n),+0s,2299161j)>=>"元日", #<Date: 2021-01-11 ((2459226j,0s,0n),+0s,2299161j)>=>"成人の日", #<Date: 2021-02-11 ((2459257j,0s,0n),+0s,2299161j)>=>"建国記念の日", #<Date: 2021-02-23 ((2459269j,0s,0n),+0s,2299161j)>=>"天皇誕生日", #<Date: 2021-03-20 ((2459294j,0s,0n),+0s,2299161j)>=>"春分の日", #<Date: 2021-04-29 ((2459334j,0s,0n),+0s,2299161j)>=>"昭和の日", #<Date: 2021-05-03 ((2459338j,0s,0n),+0s,2299161j)>=>"憲法記念日", #<Date: 2021-05-04 ((2459339j,0s,0n),+0s,2299161j)>=>"みどりの日", #<Date: 2021-05-05 ((2459340j,0s,0n),+0s,2299161j)>=>"こどもの日", #<Date: 2021-07-22 ((2459418j,0s,0n),+0s,2299161j)>=>"海の日", #<Date: 2021-07-23 ((2459419j,0s,0n),+0s,2299161j)>=>"スポーツの日", #<Date: 2021-08-08 ((2459435j,0s,0n),+0s,2299161j)>=>"山の日", #<Date: 2021-08-09 ((2459436j,0s,0n),+0s,2299161j)>=>"振替休日", #<Date: 2021-09-20 ((2459478j,0s,0n),+0s,2299161j)>=>"敬老の日", #<Date: 2021-09-23 ((2459481j,0s,0n),+0s,2299161j)>=>"秋分の日", #<Date: 2021-11-03 ((2459522j,0s,0n),+0s,2299161j)>=>"文化の日", #<Date: 2021-11-23 ((2459542j,0s,0n),+0s,2299161j)>=>"勤労感謝の日"} -
between(from_date,to_date)― from_date から to_date までの祝日について、日付=>祝日名のHashを返すHolidayJapan.between("2021-4-1","2022-3-31") => {#<Date: 2021-04-29 ((2459334j,0s,0n),+0s,2299161j)>=>"昭和の日", #<Date: 2021-05-03 ((2459338j,0s,0n),+0s,2299161j)>=>"憲法記念日", #<Date: 2021-05-04 ((2459339j,0s,0n),+0s,2299161j)>=>"みどりの日", #<Date: 2021-05-05 ((2459340j,0s,0n),+0s,2299161j)>=>"こどもの日", #<Date: 2021-07-22 ((2459418j,0s,0n),+0s,2299161j)>=>"海の日", #<Date: 2021-07-23 ((2459419j,0s,0n),+0s,2299161j)>=>"スポーツの日", #<Date: 2021-08-08 ((2459435j,0s,0n),+0s,2299161j)>=>"山の日", #<Date: 2021-08-09 ((2459436j,0s,0n),+0s,2299161j)>=>"振替休日", #<Date: 2021-09-20 ((2459478j,0s,0n),+0s,2299161j)>=>"敬老の日", #<Date: 2021-09-23 ((2459481j,0s,0n),+0s,2299161j)>=>"秋分の日", #<Date: 2021-11-03 ((2459522j,0s,0n),+0s,2299161j)>=>"文化の日", #<Date: 2021-11-23 ((2459542j,0s,0n),+0s,2299161j)>=>"勤労感謝の日", #<Date: 2022-01-01 ((2459581j,0s,0n),+0s,2299161j)>=>"元日", #<Date: 2022-01-10 ((2459590j,0s,0n),+0s,2299161j)>=>"成人の日", #<Date: 2022-02-11 ((2459622j,0s,0n),+0s,2299161j)>=>"建国記念の日", #<Date: 2022-02-23 ((2459634j,0s,0n),+0s,2299161j)>=>"天皇誕生日", #<Date: 2022-03-21 ((2459660j,0s,0n),+0s,2299161j)>=>"春分の日"}
祝日データをCSVに出力
```
$ ruby -r csv -r holiday_japan -e 'CSV.open("holiday.csv","w"){|c| HolidayJapan.between(2020,2021).each{|a| c<<a}}'
$ head -n3 holiday.csv ; echo ...; tail -n3 holiday.csv
2020-01-01,元日
2020-01-13,成人の日
2020-02-11,建国記念の日
...
2021-09-23,秋分の日
2021-11-03,文化の日
2021-11-23,勤労感謝の日
```
祝日データ
- 1948年7月20日(祝日法発令) 以降の祝日に対応
- 2021年の暦要項まで確認(法改正がない限り以降も有効)
- 春分の日・秋分の日の計算は2150年まで
Author:
Masahiro TANAKA
Copyright:
(C) Copyright 2003-2020 by Masahiro TANAKA
This program is free software under MIT license.
See LICENSE.txt.
NO WARRANTY.
Version:
2018-04-14 ver 1.4