项目作者: masa16

项目描述 :
Calculate National Holidays of Japan
高级语言: Ruby
项目地址: git://github.com/masa16/holiday_japan.git
创建时间: 2012-12-23T10:12:22Z
项目社区:https://github.com/masa16/holiday_japan

开源协议:MIT License

下载


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

(GitHub),
(RubyGems)

特徴

  • 1948年7月20日以降の日本の国民の祝日、振替休日、および国民の休日を計算して判定。
  • スクリプトコード(holiday_japan.rb)は、祝日データを含めて200行弱とコンパクト。

(date2 の holiday.rb と比較して)

  • 祝日をキャッシュすることにより、大量の日付について祝日判定する場合でも高速に動作
  • 祝日名を返すことが可能
  • 祝日のルールをテーブルで持つことにより、法改正による祝日変更への対応が容易

(holiday_jp と比較して)

  • holiday_jp は日付をキーとする祝日データセットに基く。holiday_japan は祝日ルールに基き、照会された年ごとにデータセットを生成する。

インストール

  • RubyGems によるインストール

    1. gem install holiday_japan
  • または、holiday_japan.rb
    のスクリプトファイルを ruby のライブラリパスに置く

使い方

モジュールをロード

  1. require 'holiday_japan'

HolidayJapan モジュール関数

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

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

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

    1. $ ruby -r holiday_japan -e 'HolidayJapan.print_year 2022'
    2. listing year 2022...
    3. 2022-01-01 Sat 元日
    4. 2022-01-10 Mon 成人の日
    5. 2022-02-11 Fri 建国記念の日
    6. 2022-02-23 Wed 天皇誕生日
    7. 2022-03-21 Mon 春分の日
    8. 2022-04-29 Fri 昭和の日
    9. 2022-05-03 Tue 憲法記念日
    10. 2022-05-04 Wed みどりの日
    11. 2022-05-05 Thu こどもの日
    12. 2022-07-18 Mon 海の日
    13. 2022-08-11 Thu 山の日
    14. 2022-09-19 Mon 敬老の日
    15. 2022-09-23 Fri 秋分の日
    16. 2022-10-10 Mon スポーツの日
    17. 2022-11-03 Thu 文化の日
    18. 2022-11-23 Wed 勤労感謝の日
  • list_year(year) ― ある年について、 [日付, 祝日名] のArrayを返す

    1. HolidayJapan.list_year(2022)
    2. => [[#<Date: 2022-01-01 ((2459581j,0s,0n),+0s,2299161j)>, "元日"],
    3. [#<Date: 2022-01-10 ((2459590j,0s,0n),+0s,2299161j)>, "成人の日"],
    4. [#<Date: 2022-02-11 ((2459622j,0s,0n),+0s,2299161j)>, "建国記念の日"],
    5. [#<Date: 2022-02-23 ((2459634j,0s,0n),+0s,2299161j)>, "天皇誕生日"],
    6. [#<Date: 2022-03-21 ((2459660j,0s,0n),+0s,2299161j)>, "春分の日"],
    7. [#<Date: 2022-04-29 ((2459699j,0s,0n),+0s,2299161j)>, "昭和の日"],
    8. [#<Date: 2022-05-03 ((2459703j,0s,0n),+0s,2299161j)>, "憲法記念日"],
    9. [#<Date: 2022-05-04 ((2459704j,0s,0n),+0s,2299161j)>, "みどりの日"],
    10. [#<Date: 2022-05-05 ((2459705j,0s,0n),+0s,2299161j)>, "こどもの日"],
    11. [#<Date: 2022-07-18 ((2459779j,0s,0n),+0s,2299161j)>, "海の日"],
    12. [#<Date: 2022-08-11 ((2459803j,0s,0n),+0s,2299161j)>, "山の日"],
    13. [#<Date: 2022-09-19 ((2459842j,0s,0n),+0s,2299161j)>, "敬老の日"],
    14. [#<Date: 2022-09-23 ((2459846j,0s,0n),+0s,2299161j)>, "秋分の日"],
    15. [#<Date: 2022-10-10 ((2459863j,0s,0n),+0s,2299161j)>, "スポーツの日"],
    16. [#<Date: 2022-11-03 ((2459887j,0s,0n),+0s,2299161j)>, "文化の日"],
    17. [#<Date: 2022-11-23 ((2459907j,0s,0n),+0s,2299161j)>, "勤労感謝の日"]]
  • hash_year(year) ― ある年について、 {日付=>祝日名} のHashを返す

    1. HolidayJapan.hash_year(2022)
    2. => {#<Date: 2022-01-01 ((2459581j,0s,0n),+0s,2299161j)>=>"元日",
    3. #<Date: 2022-01-10 ((2459590j,0s,0n),+0s,2299161j)>=>"成人の日",
    4. #<Date: 2022-02-11 ((2459622j,0s,0n),+0s,2299161j)>=>"建国記念の日",
    5. #<Date: 2022-02-23 ((2459634j,0s,0n),+0s,2299161j)>=>"天皇誕生日",
    6. #<Date: 2022-03-21 ((2459660j,0s,0n),+0s,2299161j)>=>"春分の日",
    7. #<Date: 2022-04-29 ((2459699j,0s,0n),+0s,2299161j)>=>"昭和の日",
    8. #<Date: 2022-05-03 ((2459703j,0s,0n),+0s,2299161j)>=>"憲法記念日",
    9. #<Date: 2022-05-04 ((2459704j,0s,0n),+0s,2299161j)>=>"みどりの日",
    10. #<Date: 2022-05-05 ((2459705j,0s,0n),+0s,2299161j)>=>"こどもの日",
    11. #<Date: 2022-07-18 ((2459779j,0s,0n),+0s,2299161j)>=>"海の日",
    12. #<Date: 2022-08-11 ((2459803j,0s,0n),+0s,2299161j)>=>"山の日",
    13. #<Date: 2022-09-19 ((2459842j,0s,0n),+0s,2299161j)>=>"敬老の日",
    14. #<Date: 2022-09-23 ((2459846j,0s,0n),+0s,2299161j)>=>"秋分の日",
    15. #<Date: 2022-10-10 ((2459863j,0s,0n),+0s,2299161j)>=>"スポーツの日",
    16. #<Date: 2022-11-03 ((2459887j,0s,0n),+0s,2299161j)>=>"文化の日",
    17. #<Date: 2022-11-23 ((2459907j,0s,0n),+0s,2299161j)>=>"勤労感謝の日"}
  • between(from_date,to_date) ― from_date から to_date までの祝日について、{日付=>祝日名}のHashを返す

    1. HolidayJapan.between("2022-4-1","2023-3-31")
    2. => {#<Date: 2022-04-29 ((2459699j,0s,0n),+0s,2299161j)>=>"昭和の日",
    3. #<Date: 2022-05-03 ((2459703j,0s,0n),+0s,2299161j)>=>"憲法記念日",
    4. #<Date: 2022-05-04 ((2459704j,0s,0n),+0s,2299161j)>=>"みどりの日",
    5. #<Date: 2022-05-05 ((2459705j,0s,0n),+0s,2299161j)>=>"こどもの日",
    6. #<Date: 2022-07-18 ((2459779j,0s,0n),+0s,2299161j)>=>"海の日",
    7. #<Date: 2022-08-11 ((2459803j,0s,0n),+0s,2299161j)>=>"山の日",
    8. #<Date: 2022-09-19 ((2459842j,0s,0n),+0s,2299161j)>=>"敬老の日",
    9. #<Date: 2022-09-23 ((2459846j,0s,0n),+0s,2299161j)>=>"秋分の日",
    10. #<Date: 2022-10-10 ((2459863j,0s,0n),+0s,2299161j)>=>"スポーツの日",
    11. #<Date: 2022-11-03 ((2459887j,0s,0n),+0s,2299161j)>=>"文化の日",
    12. #<Date: 2022-11-23 ((2459907j,0s,0n),+0s,2299161j)>=>"勤労感謝の日",
    13. #<Date: 2023-01-01 ((2459946j,0s,0n),+0s,2299161j)>=>"元日",
    14. #<Date: 2023-01-02 ((2459947j,0s,0n),+0s,2299161j)>=>"振替休日",
    15. #<Date: 2023-01-09 ((2459954j,0s,0n),+0s,2299161j)>=>"成人の日",
    16. #<Date: 2023-02-11 ((2459987j,0s,0n),+0s,2299161j)>=>"建国記念の日",
    17. #<Date: 2023-02-23 ((2459999j,0s,0n),+0s,2299161j)>=>"天皇誕生日",
    18. #<Date: 2023-03-21 ((2460025j,0s,0n),+0s,2299161j)>=>"春分の日"}

祝日データをCSVに出力

  1. $ ruby -r csv -r holiday_japan -e 'CSV.open("holiday.csv","w"){|c| HolidayJapan.between(2021,2022).each{|a| c<<a}}'
  2. $ head -n3 holiday.csv ; echo ...; tail -n3 holiday.csv
  3. 2021-01-01,元日
  4. 2021-01-11,成人の日
  5. 2021-02-11,建国記念の日
  6. ...
  7. 2022-10-10,スポーツの日
  8. 2022-11-03,文化の日
  9. 2022-11-23,勤労感謝の日

祝日データ

  • 1948年7月20日(祝日法発令) 以降の祝日に対応
  • 2023年の暦要項まで確認済(法改正がない限り以降も有効)
  • 春分の日・秋分の日の計算は2150年まで

Author:

  1. Masahiro TANAKA
  1. (C) Copyright 2003-2022 by Masahiro TANAKA
  2. This program is free software under MIT license.
  3. See LICENSE.txt.
  4. NO WARRANTY.

Version:

  1. 2018-04-14 ver 1.4 祝日データ仕様変更、2019,2020年対応
  2. 2017-12-01 ver 1.3 print_between 関数追加
  3. 2015-04-11 ver 1.2 hash_year, between 関数追加
  4. 2014-05-23 ver 1.1 「山の日」追加
  5. 2012-12-23 ver 1.0 モジュール名を Holiday から HolidayJapan に変更
  6. 2007-08-02 ver 0.9 リファクタリング
  7. 2007-03-08 ver 0.8 祝日データクラスを統一、データを配列で記述
  8. 2006-02-06 ver 0.7 平成19年(西暦2007年)の暦要項 反映(祝日法改正)
  9. Holiday.create_table 修正
  10. Holiday.list_year 追加
  11. 2003-10-02 ver 0.6 祝日データ追加
  12. 2003-09-29 ver 0.5
  13. 2003-09-22 ver 0.4
  14. 2003-09-20 ver 0.3
  15. 2003-09-16 ver 0.2
  16. 2003-09-15 ver 0.1