/holiday_japan

Calculate National Holidays of Japan

Primary LanguageRubyMIT LicenseMIT

日本の祝日判定Rubyプログラム

(GitHub), (RubyGems)

特徴

  • 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 のライブラリパスに置く

使い方

モジュールをロード

require 'holiday_japan'

HolidayJapan モジュール関数

  • check(date) ― Dateクラスのオブジェクトによる祝日判定

    HolidayJapan.check(Date.new(2020,3,20))
    => true
  • name(date) ― 日付が祝日の場合は祝日名を返し、祝日でなければ nil を返す。

    HolidayJapan.name(Date.new(2020,3,20))
    => "春分の日"
  • print_year(year) ― ある年の祝日一覧をプリント

    $ ruby -r holiday_japan -e 'HolidayJapan.print_year 2020'
    listing year 2020...
    2020-01-01 Wed 元日
    2020-01-13 Mon 成人の日
    2020-02-11 Tue 建国記念の日
    2020-02-23 Sun 天皇誕生日
    2020-02-24 Mon 振替休日
    2020-03-20 Fri 春分の日
    2020-04-29 Wed 昭和の日
    2020-05-03 Sun 憲法記念日
    2020-05-04 Mon みどりの日
    2020-05-05 Tue こどもの日
    2020-05-06 Wed 振替休日
    2020-07-23 Thu 海の日
    2020-07-24 Fri スポーツの日
    2020-08-10 Mon 山の日
    2020-09-21 Mon 敬老の日
    2020-09-22 Tue 秋分の日
    2020-11-03 Tue 文化の日
    2020-11-23 Mon 勤労感謝の日
    
  • list_year(year) ― ある年について、 [日付, 祝日名] のArrayを返す

    HolidayJapan.list_year(2020)
    => [[#<Date: 2020-01-01 ((2458850j,0s,0n),+0s,2299161j)>, "元日"],
        [#<Date: 2020-01-13 ((2458862j,0s,0n),+0s,2299161j)>, "成人の日"],
        [#<Date: 2020-02-11 ((2458891j,0s,0n),+0s,2299161j)>, "建国記念の日"],
        [#<Date: 2020-02-23 ((2458903j,0s,0n),+0s,2299161j)>, "天皇誕生日"],
        [#<Date: 2020-02-24 ((2458904j,0s,0n),+0s,2299161j)>, "振替休日"],
        [#<Date: 2020-03-20 ((2458929j,0s,0n),+0s,2299161j)>, "春分の日"],
        [#<Date: 2020-04-29 ((2458969j,0s,0n),+0s,2299161j)>, "昭和の日"],
        [#<Date: 2020-05-03 ((2458973j,0s,0n),+0s,2299161j)>, "憲法記念日"],
        [#<Date: 2020-05-04 ((2458974j,0s,0n),+0s,2299161j)>, "みどりの日"],
        [#<Date: 2020-05-05 ((2458975j,0s,0n),+0s,2299161j)>, "こどもの日"],
        [#<Date: 2020-05-06 ((2458976j,0s,0n),+0s,2299161j)>, "振替休日"],
        [#<Date: 2020-07-23 ((2459054j,0s,0n),+0s,2299161j)>, "海の日"],
        [#<Date: 2020-07-24 ((2459055j,0s,0n),+0s,2299161j)>, "スポーツの日"],
        [#<Date: 2020-08-10 ((2459072j,0s,0n),+0s,2299161j)>, "山の日"],
        [#<Date: 2020-09-21 ((2459114j,0s,0n),+0s,2299161j)>, "敬老の日"],
        [#<Date: 2020-09-22 ((2459115j,0s,0n),+0s,2299161j)>, "秋分の日"],
        [#<Date: 2020-11-03 ((2459157j,0s,0n),+0s,2299161j)>, "文化の日"],
        [#<Date: 2020-11-23 ((2459177j,0s,0n),+0s,2299161j)>, "勤労感謝の日"]]
  • hash_year(year) ― ある年について、 {日付=>祝日名} のHashを返す

    HolidayJapan.hash_year(2020)
    => {#<Date: 2020-01-01 ((2458850j,0s,0n),+0s,2299161j)>=>"元日",
        #<Date: 2020-01-13 ((2458862j,0s,0n),+0s,2299161j)>=>"成人の日",
        #<Date: 2020-02-11 ((2458891j,0s,0n),+0s,2299161j)>=>"建国記念の日",
        #<Date: 2020-02-23 ((2458903j,0s,0n),+0s,2299161j)>=>"天皇誕生日",
        #<Date: 2020-02-24 ((2458904j,0s,0n),+0s,2299161j)>=>"振替休日",
        #<Date: 2020-03-20 ((2458929j,0s,0n),+0s,2299161j)>=>"春分の日",
        #<Date: 2020-04-29 ((2458969j,0s,0n),+0s,2299161j)>=>"昭和の日",
        #<Date: 2020-05-03 ((2458973j,0s,0n),+0s,2299161j)>=>"憲法記念日",
        #<Date: 2020-05-04 ((2458974j,0s,0n),+0s,2299161j)>=>"みどりの日",
        #<Date: 2020-05-05 ((2458975j,0s,0n),+0s,2299161j)>=>"こどもの日",
        #<Date: 2020-05-06 ((2458976j,0s,0n),+0s,2299161j)>=>"振替休日",
        #<Date: 2020-07-23 ((2459054j,0s,0n),+0s,2299161j)>=>"海の日",
        #<Date: 2020-07-24 ((2459055j,0s,0n),+0s,2299161j)>=>"スポーツの日",
        #<Date: 2020-08-10 ((2459072j,0s,0n),+0s,2299161j)>=>"山の日",
        #<Date: 2020-09-21 ((2459114j,0s,0n),+0s,2299161j)>=>"敬老の日",
        #<Date: 2020-09-22 ((2459115j,0s,0n),+0s,2299161j)>=>"秋分の日",
        #<Date: 2020-11-03 ((2459157j,0s,0n),+0s,2299161j)>=>"文化の日",
        #<Date: 2020-11-23 ((2459177j,0s,0n),+0s,2299161j)>=>"勤労感謝の日"}
  • between(from_date,to_date) ― from_date から to_date までの祝日について、{日付=>祝日名}のHashを返す

    HolidayJapan.between("2020-4-1","2021-3-31")
    => {#<Date: 2020-04-29 ((2458969j,0s,0n),+0s,2299161j)>=>"昭和の日",
        #<Date: 2020-05-03 ((2458973j,0s,0n),+0s,2299161j)>=>"憲法記念日",
        #<Date: 2020-05-04 ((2458974j,0s,0n),+0s,2299161j)>=>"みどりの日",
        #<Date: 2020-05-05 ((2458975j,0s,0n),+0s,2299161j)>=>"こどもの日",
        #<Date: 2020-05-06 ((2458976j,0s,0n),+0s,2299161j)>=>"振替休日",
        #<Date: 2020-07-23 ((2459054j,0s,0n),+0s,2299161j)>=>"海の日",
        #<Date: 2020-07-24 ((2459055j,0s,0n),+0s,2299161j)>=>"スポーツの日",
        #<Date: 2020-08-10 ((2459072j,0s,0n),+0s,2299161j)>=>"山の日",
        #<Date: 2020-09-21 ((2459114j,0s,0n),+0s,2299161j)>=>"敬老の日",
        #<Date: 2020-09-22 ((2459115j,0s,0n),+0s,2299161j)>=>"秋分の日",
        #<Date: 2020-11-03 ((2459157j,0s,0n),+0s,2299161j)>=>"文化の日",
        #<Date: 2020-11-23 ((2459177j,0s,0n),+0s,2299161j)>=>"勤労感謝の日",
        #<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)>=>"春分の日"}

祝日データをCSVに出力

$ ruby -r csv -r holiday_japan -e 'CSV.open("holiday.csv","w"){|c| HolidayJapan.between(2018,2020).each{|a| c<<a}}'
$ head -n3 holiday.csv ; echo ...; tail -n3 holiday.csv
2018-01-01,元日
2018-01-08,成人の日
2018-02-11,建国記念の日
...
2020-09-22,秋分の日
2020-11-03,文化の日
2020-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  祝日データ仕様変更、2019,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