[[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?
とでも書いてみたら、わかると思うわ。