- 1948年7月20日以降の日本の国民の祝日、振替休日、および国民の休日を計算して判定。
- スクリプトコード(holiday_japan.rb)は、祝日データを含めて200行弱とコンパクト。
(date2 の holiday.rb と比較して)
- 祝日をキャッシュすることにより、大量の日付について祝日判定する場合でも高速に動作
- 祝日名を返すことが可能
- 祝日のルールをテーブルで持つことにより、法改正による祝日変更への対応が容易
-
RubyGems によるインストール
gem install holiday_japan
-
または、holiday_japan.rb のスクリプトファイルを ruby のライブラリパスに置く
require 'holiday_japan'
-
check(date)
― Dateクラスのオブジェクトによる祝日判定HolidayJapan.check(Date.new(2018,3,21)) => true
-
name(date)
― 日付が祝日の場合は祝日名を返し、祝日でなければ nil を返す。HolidayJapan.name(Date.new(2018,3,21)) => "春分の日"
-
print_year(year)
― ある年の祝日一覧をプリント$ ruby -r holiday_japan -e 'HolidayJapan.print_year 2018' listing year 2018... 2018-01-01 Mon 元日 2018-01-08 Mon 成人の日 2018-02-11 Sun 建国記念の日 2018-02-12 Mon 振替休日 2018-03-21 Wed 春分の日 2018-04-29 Sun 昭和の日 2018-04-30 Mon 振替休日 2018-05-03 Thu 憲法記念日 2018-05-04 Fri みどりの日 2018-05-05 Sat こどもの日 2018-07-16 Mon 海の日 2018-08-11 Sat 山の日 2018-09-17 Mon 敬老の日 2018-09-23 Sun 秋分の日 2018-09-24 Mon 振替休日 2018-10-08 Mon 体育の日 2018-11-03 Sat 文化の日 2018-11-23 Fri 勤労感謝の日 2018-12-23 Sun 天皇誕生日 2018-12-24 Mon 振替休日
-
list_year(year)
― ある年について、 [日付, 祝日名] のArrayを返すHolidayJapan.list_year(2018) => [[#<Date: 2018-01-01 ((2458120j,0s,0n),+0s,2299161j)>, "元日"], [#<Date: 2018-01-08 ((2458127j,0s,0n),+0s,2299161j)>, "成人の日"], [#<Date: 2018-02-11 ((2458161j,0s,0n),+0s,2299161j)>, "建国記念の日"], [#<Date: 2018-02-12 ((2458162j,0s,0n),+0s,2299161j)>, "振替休日"], [#<Date: 2018-03-21 ((2458199j,0s,0n),+0s,2299161j)>, "春分の日"], [#<Date: 2018-04-29 ((2458238j,0s,0n),+0s,2299161j)>, "昭和の日"], [#<Date: 2018-04-30 ((2458239j,0s,0n),+0s,2299161j)>, "振替休日"], [#<Date: 2018-05-03 ((2458242j,0s,0n),+0s,2299161j)>, "憲法記念日"], [#<Date: 2018-05-04 ((2458243j,0s,0n),+0s,2299161j)>, "みどりの日"], [#<Date: 2018-05-05 ((2458244j,0s,0n),+0s,2299161j)>, "こどもの日"], [#<Date: 2018-07-16 ((2458316j,0s,0n),+0s,2299161j)>, "海の日"], [#<Date: 2018-08-11 ((2458342j,0s,0n),+0s,2299161j)>, "山の日"], [#<Date: 2018-09-17 ((2458379j,0s,0n),+0s,2299161j)>, "敬老の日"], [#<Date: 2018-09-23 ((2458385j,0s,0n),+0s,2299161j)>, "秋分の日"], [#<Date: 2018-09-24 ((2458386j,0s,0n),+0s,2299161j)>, "振替休日"], [#<Date: 2018-10-08 ((2458400j,0s,0n),+0s,2299161j)>, "体育の日"], [#<Date: 2018-11-03 ((2458426j,0s,0n),+0s,2299161j)>, "文化の日"], [#<Date: 2018-11-23 ((2458446j,0s,0n),+0s,2299161j)>, "勤労感謝の日"], [#<Date: 2018-12-23 ((2458476j,0s,0n),+0s,2299161j)>, "天皇誕生日"], [#<Date: 2018-12-24 ((2458477j,0s,0n),+0s,2299161j)>, "振替休日"]]
-
hash_year(year)
― ある年について、 {日付=>祝日名} のHashを返すHolidayJapan.hash_year(2018) => {#<Date: 2018-01-01 ((2458120j,0s,0n),+0s,2299161j)>=>"元日", #<Date: 2018-01-08 ((2458127j,0s,0n),+0s,2299161j)>=>"成人の日", #<Date: 2018-02-11 ((2458161j,0s,0n),+0s,2299161j)>=>"建国記念の日", #<Date: 2018-02-12 ((2458162j,0s,0n),+0s,2299161j)>=>"振替休日", #<Date: 2018-03-21 ((2458199j,0s,0n),+0s,2299161j)>=>"春分の日", #<Date: 2018-04-29 ((2458238j,0s,0n),+0s,2299161j)>=>"昭和の日", #<Date: 2018-04-30 ((2458239j,0s,0n),+0s,2299161j)>=>"振替休日", #<Date: 2018-05-03 ((2458242j,0s,0n),+0s,2299161j)>=>"憲法記念日", #<Date: 2018-05-04 ((2458243j,0s,0n),+0s,2299161j)>=>"みどりの日", #<Date: 2018-05-05 ((2458244j,0s,0n),+0s,2299161j)>=>"こどもの日", #<Date: 2018-07-16 ((2458316j,0s,0n),+0s,2299161j)>=>"海の日", #<Date: 2018-08-11 ((2458342j,0s,0n),+0s,2299161j)>=>"山の日", #<Date: 2018-09-17 ((2458379j,0s,0n),+0s,2299161j)>=>"敬老の日", #<Date: 2018-09-23 ((2458385j,0s,0n),+0s,2299161j)>=>"秋分の日", #<Date: 2018-09-24 ((2458386j,0s,0n),+0s,2299161j)>=>"振替休日", #<Date: 2018-10-08 ((2458400j,0s,0n),+0s,2299161j)>=>"体育の日", #<Date: 2018-11-03 ((2458426j,0s,0n),+0s,2299161j)>=>"文化の日", #<Date: 2018-11-23 ((2458446j,0s,0n),+0s,2299161j)>=>"勤労感謝の日", #<Date: 2018-12-23 ((2458476j,0s,0n),+0s,2299161j)>=>"天皇誕生日", #<Date: 2018-12-24 ((2458477j,0s,0n),+0s,2299161j)>=>"振替休日"}
-
between(from_date,to_date)
― from_date から to_date までの祝日について、{日付=>祝日名}のHashを返すHolidayJapan.between("2018-4-1","2019-3-31") => {#<Date: 2018-04-29 ((2458238j,0s,0n),+0s,2299161j)>=>"昭和の日", #<Date: 2018-04-30 ((2458239j,0s,0n),+0s,2299161j)>=>"振替休日", #<Date: 2018-05-03 ((2458242j,0s,0n),+0s,2299161j)>=>"憲法記念日", #<Date: 2018-05-04 ((2458243j,0s,0n),+0s,2299161j)>=>"みどりの日", #<Date: 2018-05-05 ((2458244j,0s,0n),+0s,2299161j)>=>"こどもの日", #<Date: 2018-07-16 ((2458316j,0s,0n),+0s,2299161j)>=>"海の日", #<Date: 2018-08-11 ((2458342j,0s,0n),+0s,2299161j)>=>"山の日", #<Date: 2018-09-17 ((2458379j,0s,0n),+0s,2299161j)>=>"敬老の日", #<Date: 2018-09-23 ((2458385j,0s,0n),+0s,2299161j)>=>"秋分の日", #<Date: 2018-09-24 ((2458386j,0s,0n),+0s,2299161j)>=>"振替休日", #<Date: 2018-10-08 ((2458400j,0s,0n),+0s,2299161j)>=>"体育の日", #<Date: 2018-11-03 ((2458426j,0s,0n),+0s,2299161j)>=>"文化の日", #<Date: 2018-11-23 ((2458446j,0s,0n),+0s,2299161j)>=>"勤労感謝の日", #<Date: 2018-12-23 ((2458476j,0s,0n),+0s,2299161j)>=>"天皇誕生日", #<Date: 2018-12-24 ((2458477j,0s,0n),+0s,2299161j)>=>"振替休日", #<Date: 2019-01-01 ((2458485j,0s,0n),+0s,2299161j)>=>"元日", #<Date: 2019-01-14 ((2458498j,0s,0n),+0s,2299161j)>=>"成人の日", #<Date: 2019-02-11 ((2458526j,0s,0n),+0s,2299161j)>=>"建国記念の日", #<Date: 2019-03-21 ((2458564j,0s,0n),+0s,2299161j)>=>"春分の日"}
$ ruby -r csv -r holiday_japan -e 'CSV.open("holiday.csv","w"){|c| HolidayJapan.between(2016,2018).each{|a| c<<a}}'
$ head -n3 holiday.csv ; echo ...; tail -n3 holiday.csv
2016-01-01,元日
2016-01-11,成人の日
2016-02-11,建国記念の日
...
2018-11-23,勤労感謝の日
2018-12-23,天皇誕生日
2018-12-24,振替休日
- 1948年7月20日(祝日法発令) 以降の祝日に対応
- 2019年の暦要項まで確認(法改正がない限り以降も有効)
- 春分の日・秋分の日の計算は2150年まで
Masahiro TANAKA
(C) Copyright 2003-2018 by Masahiro TANAKA
This program is free software under MIT license.
See LICENSE.txt.
NO WARRANTY.
2018-04-14 ver 1.4 祝日データ仕様変更、2020年対応
2017-12-01 ver 1.3 print_between 関数追加
2015-04-11 ver 1.2 hash_year, between 関数追加
2014-05-23 ver 1.1 「山の日」追加
2012-12-23 ver 1.0 モジュール名を Holiday から HolidayJapan に変更
2007-08-02 ver 0.9 リファクタリング
2007-03-08 ver 0.8 祝日データクラスを統一、データを配列で記述
2006-02-06 ver 0.7 平成19年(西暦2007年)の暦要項 反映(祝日法改正)
Holiday.create_table 修正
Holiday.list_year 追加
2003-10-02 ver 0.6 祝日データ追加
2003-09-29 ver 0.5
2003-09-22 ver 0.4
2003-09-20 ver 0.3
2003-09-16 ver 0.2
2003-09-15 ver 0.1