Javaで日付処理を行う際、「その日が日本の祝日かどうか」を判定したい場面は非常に多くあります。
例えば、バッチ処理の営業日制御、帳票出力日、締日計算、スケジューラ制御などです。
本記事では、Javaで日本の祝日判定を実装する代表的な方法を、シンプルな実装から実務向けの方法まで解説します。
日本の祝日判定が難しい理由
日本の祝日は、以下のような特徴があります。
-
年によって日付が変わる祝日(例:海の日、敬老の日)
-
春分の日・秋分の日のように天文学的に決まる祝日
-
振替休日・国民の休日の存在
-
将来的な法改正リスク
そのため、単純な if 文や固定日付の判定では破綻しやすいのが実情です。
方法①:Java標準API(java.time)だけで実装する(簡易)
Java標準APIには「祝日判定」の直接的な機能はありませんが、
自前で祝日一覧を管理することで対応できます。
実装例(固定祝日のみ)
メリット
-
依存ライブラリなし
-
実装が非常に簡単
デメリット
-
毎年メンテナンスが必要
-
振替休日・移動祝日に弱い
-
実務では非推奨
方法②:祝日データを外部ファイル(CSV / DB)で管理する(実務向け)
実務では、祝日をマスタデータとして管理するケースが多くあります。
祝日テーブル例
| holiday_date | holiday_name |
|---|---|
| 2025-01-01 | 元日 |
| 2025-01-13 | 成人の日 |
| 2025-02-11 | 建国記念の日 |
Java実装例
メリット
-
法改正に強い
-
バッチ処理・業務システム向け
-
SQLやCSVで柔軟に管理可能
デメリット
-
初期データ準備が必要
方法③:ライブラリを使う(最もおすすめ)
日本の祝日判定で定番なのが 祝日判定ライブラリ の利用です。
有名な選択肢
-
jollyday
-
holiday-jp
ここでは jollyday を例にします。
jollyday を使った祝日判定
Maven依存関係
実装例
メリット
-
振替休日・国民の休日にも対応
-
メンテナンス不要
-
実務で安心して使える
デメリット
-
外部ライブラリ依存
営業日判定(祝日+土日)
実務では「祝日かどうか」よりも、営業日かどうかを判定するケースが多いです。
実装例
どの方法を選ぶべきか?
| 方法 | おすすめ度 | 用途 |
|---|---|---|
| 固定コード | ★☆☆ | 学習・検証用 |
| マスタ管理 | ★★★ | 業務システム |
| ライブラリ | ★★★★ | 最速・安全 |
👉 業務システムでは「祝日マスタ」または「ライブラリ利用」が鉄板です。
まとめ
-
Java標準APIだけでは祝日判定は難しい
-
実務では「外部データ」または「ライブラリ」を使う
-
営業日判定は祝日+土日をセットで考える
-
将来の法改正を見越した設計が重要
祝日判定は一見シンプルですが、後から修正コストが高くなりがちな処理です。
最初から堅牢な方法を選ぶことをおすすめします。
