Java LocalDateの使い方を完全ガイド!今日の日付取得・比較・加算の基本操作
生徒
「Javaで今日の日付を表示したり、1週間後の日付を計算したりする方法を教えてください!」
先生
「それなら、Java 8から導入されたLocalDateクラスを使うのが一番便利ですよ。以前のDateクラスよりも直感的で扱いやすいのが特徴です。」
生徒
「日付の比較や、○ヶ月後といった計算も簡単にできるんでしょうか?」
先生
「はい、メソッドを呼び出すだけで簡単に操作できます。初心者の方でもすぐにマスターできるので、具体的な使い方を順番に見ていきましょう!」
1. LocalDateクラスとは?日付操作の基本
Javaで日付を扱う際、最も標準的で使いやすいのがjava.time.LocalDateクラスです。このクラスは「2026年1月5日」のような、時刻(時・分・秒)を含まない「日付のみ」を管理するために設計されています。
昔のJavaではjava.util.DateやCalendarクラスが使われていましたが、これらは設計が複雑で、プログラミング初心者がミスをしやすい構造でした。現代のJava開発では、このLocalDateを含む「Date and Time API」を使うのが一般的です。このクラスの大きな特徴は、一度作成したインスタンスの状態を変えられない「不変(Immutable)」であることです。これにより、プログラムのバグを減らし、安全に日付を操作することが可能になっています。
例えば、予約システムや誕生日管理、有効期限のチェックなど、時刻を必要としないあらゆる場面でこのクラスが活躍します。まずは、このクラスを使ってどのように日付データを生成するのか、その第一歩を学んでいきましょう。
2. 今日の日付を取得する方法
プログラムを実行した瞬間の「今日の日付」を取得するのは非常に簡単です。LocalDate.now()というメソッドを呼び出すだけで、実行環境のシステム時計に基づいた現在の日付を取得できます。
以下のサンプルコードで、実際に今日の日付を表示させる方法を確認してみましょう。Javaのプログラムを動かす際の基本となるコードです。
import java.time.LocalDate;
public class TodayDateExample {
public static void main(String[] args) {
// 今日の日付を取得
LocalDate today = LocalDate.now();
// 結果を表示
System.out.println("今日の日付は: " + today);
}
}
実行結果は以下のようになります(実行した日によって日付は変わります)。
今日の日付は: 2026-01-05
このように、デフォルトでは「yyyy-MM-dd」の形式で出力されます。ハイフンで区切られた分かりやすい形式ですね。これが日付操作の全ての起点となります。
3. 特定の日付を指定してインスタンスを作成する
「2026年12月25日」のように、特定の日付を扱いたい場合にはofメソッドを使用します。このメソッドには、引数として「年、月、日」を数値で渡します。
また、文字列から日付を作成する場合はparseメソッドを使用します。例えば、データベースや外部のファイルから読み込んだ日付文字列をLocalDateオブジェクトに変換したい時に非常に便利です。文字列の形式は標準で「yyyy-MM-dd」である必要がありますが、柔軟な解析も可能です。
import java.time.LocalDate;
public class CreateDateExample {
public static void main(String[] args) {
// 数値を指定して作成(2026年10月10日)
LocalDate specificDate = LocalDate.of(2026, 10, 10);
// 文字列から変換して作成
LocalDate parsedDate = LocalDate.parse("2026-12-31");
System.out.println("指定した日付: " + specificDate);
System.out.println("解析した日付: " + parsedDate);
}
}
実行結果はこちらです。
指定した日付: 2026-10-10
解析した日付: 2026-12-31
ofメソッドを使う際、月を「0〜11」ではなく「1〜12」で直感的に指定できる点が、古いJavaのCalendarクラスと比べて非常に親切な設計になっています。
4. 日付の加算・減算(○日後や○ヶ月前を計算)
日付の計算は、LocalDateの真骨頂です。例えば「3日後」「2週間前」「1ヶ月後」といった計算を、メソッド一つで行うことができます。加算にはplus系のメソッド、減算にはminus系のメソッドを使用します。
ここで重要なのは、LocalDateは不変であるため、元のオブジェクト自体は変わらないという点です。メソッドを呼び出すと、計算結果を持った「新しいオブジェクト」が返されます。この特性を理解しておくことが、Java初心者がつまずかないためのポイントです。
import java.time.LocalDate;
public class DateCalcExample {
public static void main(String[] args) {
LocalDate baseDate = LocalDate.of(2026, 1, 1);
// 10日後を計算
LocalDate after10Days = baseDate.plusDays(10);
// 2ヶ月前を計算
LocalDate before2Months = baseDate.minusMonths(2);
// 1年後を計算
LocalDate after1Year = baseDate.plusYears(1);
System.out.println("基準日: " + baseDate);
System.out.println("10日後: " + after10Days);
System.out.println("2ヶ月前: " + before2Months);
System.out.println("1年後: " + after1Year);
}
}
実行結果は以下の通りです。
基準日: 2026-01-01
10日後: 2026-01-11
2ヶ月前: 2025-11-01
1年後: 2027-01-01
うるう年などの複雑な計算も、Javaが自動で行ってくれるため、プログラマが細かなロジックを書く必要はありません。非常に安全に日付計算が行えます。
5. 日付の比較(前後関係の判定)
「この日付は今日より前か?」といった比較も頻繁に行われます。LocalDateには、比較専用のメソッドが用意されています。
isBefore:指定した日付より前かisAfter:指定した日付より後かisEqual:同じ日付か
これらは真偽値(boolean型)を返すため、if文の条件式としてそのまま利用できます。以下のコードで具体的な判定方法を見てみましょう。
import java.time.LocalDate;
public class DateCompareExample {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
LocalDate deadline = LocalDate.of(2026, 3, 31);
if (today.isBefore(deadline)) {
System.out.println("締切日はまだ先です。");
} else if (today.isAfter(deadline)) {
System.out.println("既に締切日を過ぎています!");
} else {
System.out.println("今日が締切日です。");
}
}
}
実行結果は、その時の日付によりますが、条件分岐が正しく行われることが分かります。数値の比較のように<や>記号を使うことはできないので、必ずこれらのメソッドを使用するようにしましょう。
6. 日付から個別の情報(年・月・日・曜日)を取り出す
「日付オブジェクトから、月だけを取り出して条件分岐に使いたい」といった場合もあります。LocalDateには各要素を取得するための「get」系メソッドが豊富に用意されています。
年はgetYear()、月はgetMonthValue()、日はgetDayOfMonth()で取得できます。また、曜日の取得にはgetDayOfWeek()を使用します。曜日を取得すると、数値ではなく「MONDAY」や「TUESDAY」といった列挙型(Enum)が返ってきますが、必要に応じて日本語の曜日名を表示させることも可能です。
これらのメソッドを使えば、カレンダーアプリのように特定の日付の情報をバラバラにして処理することができます。ユーザーインターフェースに表示する際にも役立つ知識です。
7. 日付のフォーマット変換(表示形式をカスタマイズ)
デフォルトの「yyyy-MM-dd」形式ではなく、「2026年1月5日」のように日本人に馴染みのある形式で表示したいことも多いでしょう。その場合は、DateTimeFormatterクラスを組み合わせて使用します。
formatメソッドにフォーマットのパターンを指定することで、自由自在に見た目を変えることができます。例えば「yyyy/MM/dd (E)」と指定すれば、スラッシュ区切りで曜日付きの文字列を出力することも可能です。プログラム内部ではLocalDateのまま扱い、表示する直前でフォーマット変換するのが良い設計の基本です。ユーザーにとって読みやすい形に整えることで、アプリケーションの利便性がぐっと高まります。
8. 期間の計算(2つの日付の差を求める)
「イベントまであと何日か?」という計算には、ChronoUnitクラスを使うのが便利です。これは日付の差を「日」や「月」といった単位で一発で計算してくれる便利なツールです。また、Periodクラスを使うと「○年○ヶ月○日」という形式で期間を取得することもできます。
誕生日から現在までの経過年数を計算して年齢を算出したり、レンタル商品の返却期限までの日数を数えたりするロジックは、実務でも非常によく使われます。betweenメソッドを使うだけで、複雑な日数の計算を一瞬で終わらせることができるため、ぜひ覚えておきたいテクニックの一つです。このように、Javaの新しい日付APIは、やりたいことに対して直感的な答えを用意してくれています。