プログラムの自動化などで、平日にだけ実行したいと思った事はありませんか?そんな時に便利な祝祭日を自動で判別するプログラムを作ってみましたので共有したいと思います。
# 日本における休日とは
我が国における休日とは、法定休日、WKD(週休日)、年末年始の3つです。ちなみに、ここでは土曜日も休日として扱います。土曜を休日にしたくない人は土曜日の部分をカットして下さい。
# 全体的な流れ
isHoliday()は、引数dateにDate型の日付を渡すとtrue/falseを返します。 dateが休日ならtrueを、休日でないならfalseを返します。 isHoliday()はisSunday()やisFixedHoliday()などの小さな補助関数で構成されています。これから休日となるパターンを一つ一つ追加していきましょう。
# 土日のチェック
isSunday()やisSaturday()は、引数で渡したdayOfWeekが0(日曜)か6(土曜)のときにtrueを返します。
# 固定の祝祭日をチェック
isFixedHoliday()は、日本のカレンダーで毎年固定された休日、つまり2月11日、3月20日、4月29日、5月3日、5月4日、5月5日、9月15日、9月23日、10月10日、11月3日、11月23日、12月23日のいずれかがtrueを返します。
# 年によって変動する休日
次は年によって変動する休日を調べるためのisVariableHoliday()です。第何月曜日かを調べる事で対処します。
# 春分の日と秋分の日
春分の日と秋分の日も特殊な計算が必要なので計算します。ただし条件が複雑なので、年によっては完全にカレンダーどおりにはならないかもしれません。
# 振替休日
前日が日曜日で休日だった場合、翌月曜日は振替休日となります。今度は月曜日で
# 国民の休日
いよいよ最後の国民の休日です。国民の休日とはWikipediaによれば 前後が祝日である平日は、国民の休日となり、休日となる。 との事です。
# 出来上がったコード
全てを繋げて一つのコードなった完成形はこちらです。これでカレンダーで赤い日はtrue、黒い日と土曜日はfalseになるようになりました。ただし国の行事など特殊な事情が発生した場合には対応できません。また、年末年始やお盆なども対応していませんので、必要な方は適宜修正してください。