JavaのLocalDate.compareToの使い方を完全ガイド!初心者でもわかる日付比較
生徒
「先生、Javaで2つの日付が同じかどうか比べるにはどうすればいいんですか?」
先生
「それならLocalDateクラスのcompareToメソッドを使うのが基本ですよ。」
生徒
「equalsとは違うんですか?どっちを使えばいいのか迷います…」
先生
「良いポイントですね。equalsは完全一致、compareToは前後関係も含めて比較できるんです。順番に解説していきましょう!」
1. java.timeパッケージとLocalDateの基本
Javaでは、日付や時間を扱うためにjava.timeパッケージが用意されています。特にLocalDateクラスは、年・月・日を表す日付専用のクラスです。時間情報は含まず、スケジュール管理や日付の比較に適しています。
このLocalDateクラスは、Java SE 8から導入されたjava.timeパッケージに含まれており、従来のDateやCalendarクラスに比べて、シンプルで使いやすく、安全に扱えるのが特徴です。
2. LocalDate.compareToメソッドとは?
compareToメソッドは、2つのLocalDateオブジェクトを比較して、どちらが先か、同じか、後かを判定するメソッドです。戻り値はint型で、次のような値になります:
- 0:同じ日付
- 負の数:呼び出し元の日付が引数より前
- 正の数:呼び出し元の日付が引数より後
このメソッドは、ソート処理や日付の前後比較に非常に便利です。
将来を見据えて、+αのスキルを身につけたい方へ
JavaやLinuxを学んでいても、「このままで市場価値は上がるのか」 「キャリアの選択肢を広げたい」と感じる方は少なくありません。
AIを学ぶならアイデミープレミアム3. compareToメソッドの基本的な使い方
まずは、compareToの基本的な使い方を確認しましょう。以下のコードは、2つの日付を比較して、その結果を出力する例です。
import java.time.LocalDate;
public class CompareDateExample {
public static void main(String[] args) {
LocalDate date1 = LocalDate.of(2025, 9, 4);
LocalDate date2 = LocalDate.of(2025, 9, 10);
int result = date1.compareTo(date2);
System.out.println("比較結果: " + result);
}
}
比較結果: -6
この例では、date1はdate2より6日前の日付なので、-6が返されます。
4. 条件分岐に使うパターン
compareToの戻り値を使えば、「ある日付が過去か未来か」を判断する処理が簡単に書けます。以下は、if文と組み合わせた例です。
import java.time.LocalDate;
public class DateConditionExample {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
LocalDate deadline = LocalDate.of(2025, 9, 30);
if (today.compareTo(deadline) > 0) {
System.out.println("締切を過ぎています。");
} else if (today.compareTo(deadline) == 0) {
System.out.println("今日が締切日です。");
} else {
System.out.println("まだ締切前です。");
}
}
}
5. equalsとの違いと使い分け
初心者が混乱しやすいのが、equalsとcompareToの違いです。どちらも「日付の比較」に使えますが、用途が異なります。
- equals:完全に同じ日付かどうか(論理的な等価)
- compareTo:前後関係や順序も判定できる(ソートに便利)
「この2つの日付が同じかどうか」だけを見たいならequalsを使うのが適切です。一方で、日付の前後を知りたい、または並び替えたいときはcompareToが便利です。
6. ソート処理での活用例
compareToは、LocalDateをListで並び替えるときにも役立ちます。JavaのCollections.sortやStream.sortedなどと組み合わせて使えます。
import java.time.LocalDate;
import java.util.*;
public class SortDatesExample {
public static void main(String[] args) {
List<LocalDate> dates = new ArrayList<>();
dates.add(LocalDate.of(2025, 12, 1));
dates.add(LocalDate.of(2025, 1, 10));
dates.add(LocalDate.of(2025, 6, 5));
Collections.sort(dates);
for (LocalDate date : dates) {
System.out.println(date);
}
}
}
2025-01-10
2025-06-05
2025-12-01
7. compareToを使う際の注意点
compareToを使う際の注意点として、nullとの比較は絶対に避けるようにしましょう。nullのLocalDateオブジェクトに対してcompareToを実行すると、NullPointerExceptionが発生します。
安全に扱うためには、事前にnullチェックを行うことが重要です。
8. compareToをマスターして日付処理を効率化しよう
compareToメソッドを使いこなすことで、Javaにおける日付の前後関係の判定や、リストの並び替え、条件分岐などがスムーズに書けるようになります。
LocalDateとcompareToはセットで覚えておくと非常に便利です。特に、日付に関する処理が多い業務アプリケーションやスケジュール管理システムでは頻繁に使われるメソッドです。
初心者の方も、この記事を参考にcompareToの使い方をしっかり身につけて、実践で活かしていきましょう!
Java Silver SE17(1Z0-825)の演習量を重視したい人には、 定番の問題集がこちらです。
徹底攻略 Java SE 17 Silver 問題集をAmazonで見る※ Amazonアソシエイト・プログラムを利用しています