JavaのLocalDateクラスの使い方を完全ガイド!初心者でもわかる日付操作の基本
生徒
「Javaで今日の日付を取得したり、日付の計算をするにはどうすればいいですか?」
先生
「Javaにはjava.timeパッケージがあり、その中のLocalDateクラスを使うと簡単にできますよ。」
生徒
「なるほど!LocalDateって、どんなことができるんですか?」
先生
「それでは、LocalDateの基本的な使い方から順番に見ていきましょう。」
1. java.timeパッケージとLocalDateクラスとは
Javaのjava.timeパッケージは、Java SE 8から追加された「新しい日付と時刻の標準API」です。日付や時刻を安全に扱うために設計されており、コードを読む人にも意味が伝わりやすい書き方ができるのが特徴です。従来のjava.util.DateやCalendarは、内部的にミリ秒の数値で管理していたり、月が0始まりだったりと、初心者には直感的に理解しづらい点が多く、思わぬバグの原因にもなりがちでした。
それに対してjava.timeパッケージでは、「日付だけ」「時刻だけ」「タイムゾーン付きの日時」など、用途ごとにクラスが分かれています。その中でもLocalDateクラスは、「年月日」だけを扱うためのクラスです。時刻(何時何分)やタイムゾーン(日本時間・アメリカ時間など)の情報は持ちません。イメージとしては、カレンダーに書いてある「2025年9月4日」のような日付そのものを表すだけの存在です。
LocalDateは、次のような「日付だけわかれば十分」という場面でよく使われます。
- 生年月日・誕生日の管理
- 入社日・契約開始日・締切日などのスケジュール
- イベントの日付(開催日・終了日)の管理
また、LocalDateは「不変(イミュータブル)なオブジェクト」として作られているのもポイントです。一度作成したLocalDateの中身は変更されず、「1日後」や「1か月前」を求めるときは、元のオブジェクトを壊さずに、新しいLocalDateが返ってくる仕組みになっています。これにより、意図しない書き換えが起きにくく、初心者でも安心して日付を扱うことができます。
イメージしやすいように、LocalDateを使ったごく簡単なサンプルを見てみましょう。ここでは「今日の日付」をLocalDate型の変数に入れて、そのまま画面に表示するだけのシンプルな例です。
import java.time.LocalDate;
public class LocalDateIntro {
public static void main(String[] args) {
// LocalDate型の変数todayに、今日の日付を入れる
LocalDate today = LocalDate.now();
// LocalDateの中身をそのまま出力してみる
System.out.println(today);
}
}
このコードでは、LocalDateという「日付専用の型」を使って、今日の日付をtodayという変数に入れています。System.out.println(today);で表示される値は「2025-09-04」のような形式になり、「その日付を1日進める」「文字列として表示形式を変える」といった操作は、次の章以降で順番に学んでいきます。まずは、「java.timeパッケージには日付や時刻を扱うクラスがあり、その中でもLocalDateは年月日だけを表すクラスなんだ」というイメージを押さえておきましょう。
2. LocalDateで現在の日付を取得する方法
LocalDateを使えば、現在の日付(システム日付)を簡単に取得できます。以下がそのサンプルコードです。
import java.time.LocalDate;
public class TodayExample {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
System.out.println("今日の日付は: " + today);
}
}
今日の日付は: 2025-09-04
LocalDate.now()を使うことで、現在の日付をLocalDate型で取得できます。
3. 特定の日付を作成するには?
日付を指定してLocalDateを作りたい場合は、ofメソッドを使います。
import java.time.LocalDate;
public class SpecificDateExample {
public static void main(String[] args) {
LocalDate date = LocalDate.of(2025, 12, 25);
System.out.println("指定した日付は: " + date);
}
}
指定した日付は: 2025-12-25
of(int year, int month, int dayOfMonth)の形式で簡単に指定可能です。
4. 日付の加算・減算をする方法
LocalDateでは、日付の足し算や引き算も簡単にできます。
import java.time.LocalDate;
public class DateCalculationExample {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
LocalDate nextWeek = today.plusDays(7);
LocalDate lastMonth = today.minusMonths(1);
System.out.println("1週間後: " + nextWeek);
System.out.println("1か月前: " + lastMonth);
}
}
1週間後: 2025-09-11
1か月前: 2025-08-04
plusDaysやminusMonthsなどを使うことで、柔軟な日付操作ができます。
5. 文字列から日付へ変換(パース)する
文字列の日付(例:"2025-09-04")をLocalDateに変換したい場合はparseメソッドを使います。
import java.time.LocalDate;
public class ParseDateExample {
public static void main(String[] args) {
LocalDate date = LocalDate.parse("2025-09-04");
System.out.println("パースした日付: " + date);
}
}
パースした日付: 2025-09-04
ISO形式(yyyy-MM-dd)の文字列であれば、簡単に変換できます。
6. 日付を文字列に変換(フォーマット)する
LocalDateを文字列として表示したい場合は、DateTimeFormatterを使ってフォーマットできます。
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class FormatDateExample {
public static void main(String[] args) {
LocalDate date = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
String formatted = date.format(formatter);
System.out.println("フォーマットされた日付: " + formatted);
}
}
フォーマットされた日付: 2025年09月04日
日本語形式の日付表記にしたいときにも便利ですね。
7. 日付の比較をする方法
LocalDateは日付の前後関係を簡単に比較できます。isBeforeやisAfterなどのメソッドを使います。
import java.time.LocalDate;
public class CompareDateExample {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
LocalDate future = LocalDate.of(2030, 1, 1);
System.out.println("未来の日付は今日より後? " + future.isAfter(today));
System.out.println("今日の日付は未来より前? " + today.isBefore(future));
}
}
未来の日付は今日より後? true
今日の日付は未来より前? true
こうした比較は、スケジュール管理などにも役立ちます。
8. LocalDateとjava.timeパッケージの活用シーン
LocalDateは、以下のようなシーンでよく使われます:
- スケジュール管理(締切や開始日)
- 予約システム(チェックイン・チェックアウト日)
- 生年月日などの登録
- 日付間の差分計算
java.timeパッケージには、LocalDate以外にもLocalTimeやLocalDateTime、ZonedDateTimeなど、目的に応じたクラスが多数用意されています。
まずはLocalDateをマスターすることで、日付操作の基本をしっかり身につけられます。
まとめ
JavaにおけるLocalDateクラスの基本を一通り学んできて、日付に関する操作がとても直感的で使いやすいことがわかりました。とくに現在の日付の取得や、特定の日付の作成、日付の加算・減算、比較やフォーマットといった処理が、シンプルな記述でできるのがjava.timeパッケージの大きな魅力です。従来のjava.util.DateやCalendarではコードが冗長になりがちでしたが、LocalDateを使うことで、より読みやすく、保守しやすいコードに仕上げることができます。
実際の開発現場では、日付の操作は避けて通れない場面が多くあります。たとえばスケジュール管理、予約システム、日付の比較による処理分岐など、さまざまなユースケースに対応できる柔軟性をLocalDateは持っています。また、DateTimeFormatterを使うことで、日本語の表記にも対応でき、ユーザーに見やすい形で日付を提供することも容易です。
日付のパース(文字列からの変換)や、フォーマット(文字列への変換)はとくに実務で使われる頻度が高く、ログ出力や画面表示などにも欠かせません。ISO形式のyyyy-MM-ddに加え、独自の形式にも柔軟に対応できる点も心強いです。また、isBeforeやisAfterを使った比較処理により、現在より未来か過去かの判定も非常に簡単に行えます。
ここで、改めてLocalDateを使ったシンプルなサンプルコードで振り返ってみましょう。以下の例は、今日から30日後の日付を計算し、日本語形式で表示するものです。
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class SummarySample {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
LocalDate future = today.plusDays(30);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
String formattedDate = future.format(formatter);
System.out.println("30日後の日付は: " + formattedDate);
}
}
30日後の日付は: 2025年10月04日
このように、JavaのLocalDateクラスを使えば、複雑に見える日付操作も驚くほど簡単に扱えます。日付を自在に操る力を身につけることは、Javaプログラマとしての大きな一歩です。LocalDateをしっかり理解し、業務に役立つ形で活用していくことが、今後の成長につながります。
生徒
「先生、LocalDateを使うと日付の操作がこんなに簡単にできるんですね!」
先生
「そうなんです。日付の取得、加算・減算、比較、フォーマットなど、現代的な書き方で扱えるのがjava.timeパッケージの魅力です。」
生徒
「plusDaysとかformatの使い方もすぐ覚えられました!文字列から日付に変換できるparseも便利ですね。」
先生
「実務でもよく使う機能なので、覚えておくと非常に役立ちますよ。たとえば予約日と今日の日付を比較して、まだ先かどうかを判定したりもできます。」
生徒
「スケジュールアプリとか作るときに活かせそうですね!このクラスだけでもかなりのことができそうです。」
先生
「まさにその通り。最初はLocalDateから始めて、慣れてきたらLocalDateTimeやZonedDateTimeなど、時間やタイムゾーンも含めた扱い方に進んでいくとよいでしょう。」
生徒
「ありがとうございます!これから日付操作のコードを書くのが楽しみになってきました。」
先生
「よい姿勢ですね。ぜひ自分でもいろいろ試して、実践的なコードをどんどん書いてみてください。」