JavaのLocalDate.ofメソッドを完全解説!任意の日付を作成する方法を初心者向けに紹介
生徒
「Javaで特定の日付を自分で作りたいときって、どうすればいいんですか?」
先生
「そんなときは、LocalDateクラスのofメソッドを使えば、年・月・日を指定して自由に日付を作ることができますよ。」
生徒
「へぇー、それは便利そうですね!でも実際にはどうやって書くんですか?」
先生
「それでは、java.time.LocalDateパッケージとofメソッドの基本的な使い方を詳しく見ていきましょう。」
1. java.timeパッケージとは?
java.timeパッケージは、Java8で導入された新しい日付と時刻のAPIを提供するパッケージです。それ以前に使われていたjava.util.DateやCalendarと比較して、コードが読みやすく、扱いやすいのが特徴です。
このパッケージには、日付を扱うLocalDate、時刻を扱うLocalTime、日付と時刻の両方を扱うLocalDateTime、そして時間の差を表すPeriodなど、さまざまなクラスがあります。
2. LocalDateクラスの役割と特徴
LocalDateクラスは、年月日だけを扱うクラスです。時刻やタイムゾーンの情報は含まれず、「2025年9月4日」のような純粋な日付だけを扱う場合に最適です。
このクラスは、日付の加算・減算、比較、フォーマットなど、日付に関するあらゆる処理を簡単に行えるように設計されています。
3. LocalDate.ofメソッドの基本構文
ofメソッドは、指定した「年・月・日」をもとにLocalDateのインスタンスを作成するための静的メソッドです。基本的な構文は以下の通りです:
LocalDate date = LocalDate.of(2025, 9, 4);
この例では、「2025年9月4日」という日付のLocalDateオブジェクトが作成されます。
4. 実際に使ってみよう:日付の作成と表示
それでは、ofメソッドを使って日付を作成し、コンソールに出力するサンプルコードを紹介します。
import java.time.LocalDate;
public class LocalDateOfExample {
public static void main(String[] args) {
LocalDate birthday = LocalDate.of(1990, 12, 25);
System.out.println("誕生日は: " + birthday);
}
}
このコードを実行すると、次のような結果が表示されます。
誕生日は: 1990-12-25
5. LocalDate.ofメソッドの引数に注意
ofメソッドに渡す引数は、すべて整数型(int)です。それぞれ「年・月・日」の順番で指定しますが、間違えて「月・日・年」などと書いてしまうとエラーになります。
また、存在しない日付を指定すると、DateTimeExceptionという例外が発生します。
// 存在しない日付
LocalDate invalidDate = LocalDate.of(2025, 2, 30); // → 例外が発生
日付の指定は正確に行うよう注意が必要です。
6. 定数や変数を使った柔軟な日付作成
ofメソッドでは、リテラルだけでなく変数を使って動的に日付を作ることもできます。例えば、ユーザーが入力した値やシステムから取得した値を使う場合に便利です。
int year = 2022;
int month = 6;
int day = 15;
LocalDate customDate = LocalDate.of(year, month, day);
System.out.println("指定日付: " + customDate);
指定日付: 2022-06-15
7. LocalDate.ofを使った実務的な活用例
LocalDate.ofメソッドは、次のような場面でよく使われます。
- 特定の日付(契約開始日、終了日、誕生日など)をプログラムに固定で設定
- テストコードで特定の日付を使いたいとき
- 日付を比較する際の基準日を作るとき
- 祝日や記念日を管理するシステムの設定
このように、日付を明示的に指定して扱う処理ではofメソッドが非常に重宝されます。
8. 日付操作と組み合わせて使う
ofメソッドで作成した日付は、そのまま他の日時処理と組み合わせることができます。例えば、1週間後の日付を計算するには次のように記述します。
LocalDate baseDate = LocalDate.of(2025, 1, 1);
LocalDate nextWeek = baseDate.plusWeeks(1);
System.out.println("1週間後: " + nextWeek);
1週間後: 2025-01-08
plusDaysやminusMonthsなどと組み合わせれば、柔軟な日付計算が可能です。