[[Ruby]]

いろいろあると思うけど、 holiday_japan を使ってみたわ。

* インストール [#n1039f1f]

とりあえず、うちのサーバのパッケージにはないみたいだから、rubygems でもらってきましょう。

 # gem install holiday_japan

さて、とりあえず知りたいのは以下よね?

* 使い方 [#r14d57e8]

** 今日は休日ですか? [#ob216511]

以下のようにしましょう。平日なら nil で、休日ならお休みの名前が入るの。

 require 'holiday_japan'
 
 p HolidayJapan.name(Date.today)
 p  HolidayJapan.name(Date.new(2016,5,5))

ちなみに、土日には対応してないみたいなのよね。

なので、こんなことをしてみたり。

 require 'holiday_japan'
 
 def holiday?
  r = HolidayJapan.name(Date.today) # 休日ならnil以外が入る。
  if r == nil # 祝日ではない。
    d = Time.now.wday
    if d == 6 || d == 0 # 土日
      r = "土日"
    end
  end
  r
 end

必要なら、振替休日も組み込んでみましょうか?

** ある年の休日一覧は? [#j9ea81a0]

ちゃんと動作しているのか確認してみましょう。たとえば2016年で。

 HolidayJapan.list_year(2016).each{|a,b|
  print <<EOM
 #{a}:#{b}
 EOM
 }

実行結果は以下。

 2016-01-01:元日
 2016-01-11:成人の日
 2016-02-11:建国記念の日
 2016-03-20:春分の日
 2016-03-21:振替休日
 2016-04-29:昭和の日
 2016-05-03:憲法記念日
 2016-05-04:みどりの日
 2016-05-05:こどもの日
 2016-07-18:海の日
 2016-08-11:山の日
 2016-09-19:敬老の日
 2016-09-22:秋分の日
 2016-10-10:体育の日
 2016-11-03:文化の日
 2016-11-23:勤労感謝の日
 2016-12-23:天皇誕生日

うん。

で、これを[[内閣府の祝日の公示>http://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html]]とくらべてみるわね。 

以下は、内閣府の抜粋。

 平成28年(2016)の国民の祝日
 
 3月21日は休日となります。
 元日	1月1日
 成人の日	1月11日
 建国記念の日	2月11日
 春分の日	3月20日
 昭和の日	4月29日
 憲法記念日	5月3日
 みどりの日	5月4日
 こどもの日	5月5日
 海の日	7月18日
 山の日	8月11日
 敬老の日	9月19日
 秋分の日	9月22日
 体育の日	10月10日
 文化の日	11月3日
 勤労感謝の日	11月23日
 天皇誕生日	12月23日

うん、合ってるみたいね、よしよし。 :)

* 組み込み用に軽改良 [#a143f976]

実際の実装に入れる前提で遊んでみましょう。

** 欲しい機能は以下の通り。 [#kabe23b3]

 today.holiday? (nilなら平日、休日なら休日名が入る)

なお、土日は基本的にお休みとして、この日は曜日を返しましょう。

うん、Dateに上の機能をとりつけた、Date2をでっちあげてみるわね。

 class Date2 < Date
   def holiday?
    r = HolidayJapan.name(self) # 休日ならnil以外が入る。
    if r == nil # 祝日ではない。
      d = self.wday
      if d == 6 || d == 0 # 土日
        if d == 6
          r = "土曜日"
         elsif d == 0
           r = "日曜日"
         end
       end
     end
     r
   end
 end

うん、これでいいわね。使い方は、

 p Date2.new(2001,5,5).holiday?

とでも書いてみたら、わかると思うわ。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS