JavaのLocalDateTime.compareToメソッドを完全解説!初心者でもわかる日時比較の基本
Javaの基礎を体系的に整理しながら学習したい方には、 資格対策としても定評のある定番教材が参考になります。
Javaプログラマ Silver SE 17 教科書をAmazonで見る※ Amazon広告リンク
生徒
「先生、Javaで二つの日時を比較したいんですが、どんな方法がありますか?」
先生
「Javaではjava.timeパッケージのLocalDateTimeクラスにあるcompareToメソッドを使うことで、二つの日時を簡単に比較できるんだよ。」
生徒
「それは便利ですね!具体的にどうやって使うんですか?」
先生
「それじゃあ、実際のコードと一緒に基本から見ていこう。」
1. java.timeパッケージとは?
java.timeパッケージは、Java8以降で新しく導入された日時APIです。従来のDateやCalendarの使いにくさを解消するために設計され、直感的で安全に日時を扱うことができます。国際化対応やタイムゾーン管理にも強力で、Webアプリや業務システムの開発に欠かせない仕組みとなっています。
2. LocalDateTimeクラスの役割
LocalDateTimeは日付と時刻を表現するクラスです。ただしタイムゾーンは含まれていません。そのため、「2025年9月23日 12時30分」という日時をそのまま扱うことができます。シンプルに日時を保持したい場合や、比較演算の基礎として利用するのに向いています。
3. compareToメソッドの基本
compareToメソッドは二つのLocalDateTimeオブジェクトを比較するために使われます。戻り値は整数で、以下のような意味を持ちます。
- 負の値:呼び出し元の日時が引数より前の場合
- ゼロ:両方の日時が同じ場合
- 正の値:呼び出し元の日時が引数より後の場合
import java.time.LocalDateTime;
public class CompareToExample {
public static void main(String[] args) {
LocalDateTime dateTime1 = LocalDateTime.of(2025, 9, 23, 10, 0);
LocalDateTime dateTime2 = LocalDateTime.of(2025, 9, 23, 15, 0);
int result = dateTime1.compareTo(dateTime2);
if (result < 0) {
System.out.println("dateTime1はdateTime2より前です。");
} else if (result == 0) {
System.out.println("両方の日時は同じです。");
} else {
System.out.println("dateTime1はdateTime2より後です。");
}
}
}
dateTime1はdateTime2より前です。
4. compareToを使うメリット
日時比較を行う方法は他にもありますが、compareToはシンプルで読みやすいという大きな利点があります。特にソート処理で利用されることが多く、リストに格納した日時を昇順や降順に並べ替える際に便利です。JavaのコレクションAPIと組み合わせれば、実用的なプログラムを簡単に書くことができます。
5. ソートでの活用例
日時のリストをソートするときにcompareToは自動的に呼び出されます。例えば、スケジュールアプリでイベントを日付順に並べたいときに非常に役立ちます。
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class SortExample {
public static void main(String[] args) {
List<LocalDateTime> dateTimes = new ArrayList<>();
dateTimes.add(LocalDateTime.of(2025, 9, 23, 15, 0));
dateTimes.add(LocalDateTime.of(2025, 9, 23, 10, 0));
dateTimes.add(LocalDateTime.of(2025, 9, 23, 12, 0));
Collections.sort(dateTimes);
for (LocalDateTime dt : dateTimes) {
System.out.println(dt);
}
}
}
2025-09-23T10:00
2025-09-23T12:00
2025-09-23T15:00
6. equalsとの違い
equalsメソッドは「等しいかどうか」を判断するだけですが、compareToは「どちらが前か後か」まで含めて比較できます。そのため、日時の大小関係を調べたい場合にはcompareToを使うのが適切です。一方で、完全に一致しているかを確認したい場合にはequalsを使う方が分かりやすいです。
7. compareToとビジネスロジック
ビジネスシステムでは「予約が未来か過去かを判断する」「期限が切れているかを確認する」といった処理がよく出てきます。これらをシンプルに実装するにはcompareToが非常に便利です。たとえば「現在の日時と締切日時を比較して、まだ間に合うか確認する」といった場面で役立ちます。
8. 現在時刻と比較する例
最後に、現在の日時と指定した日時を比較する例を紹介します。これにより「期限が切れているかどうか」を判定する処理が簡単に書けます。
import java.time.LocalDateTime;
public class DeadlineExample {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
LocalDateTime deadline = LocalDateTime.of(2025, 9, 30, 23, 59);
if (now.compareTo(deadline) < 0) {
System.out.println("まだ期限内です。");
} else {
System.out.println("期限を過ぎています。");
}
}
}
まだ期限内です。