この記事では、JavaのDate型で比較する方法について解説します。
Date型は、数値とは異なり比較方法には特徴があります。
ぜひこの記事を参考に、比較方法をマスターしてください!
目次
Date(日付)を比較する方法(LocalDate)

日付を比較する方法の1つに、「LocalDate」「isAfter」「isBefore」「isEqual」を使う方法があります。
LocalDate で日付を指定し、isAfter / isBefore / isEqual で日付を比較するイメージです。
実際にサンプルコードを見て確認していきましょう。
■記述例
import java.time.LocalDate;
public class Main{
public static void main(String[] args){
LocalDate dateOld = LocalDate.of(2019, 10, 01);
LocalDate dateNew = LocalDate.of(2020, 12, 28);
if (dateOld.isAfter(dateNew)) {
System.out.println(dateOld + "は" + dateNew + "よりも未来です");
}
if (dateOld.isBefore(dateNew)) {
System.out.println(dateOld + "は" + dateNew + "よりも過去です");
}
if (dateOld.isEqual(dateNew)) {
System.out.println(dateOld + "は" + dateNew + "と同じ日付です");
}
}
}
isAfter / isBefore / isEqual は、単語の意味の通り引数の日付に対して、過去か未来か、等しいかを true / false で返します。
上記プログラムの実行結果は次の通りです。
■実行結果 mbp:Desktop potepan$ java Main 2019-10-01は2020-12-28よりも過去です
このように、意図した結果を取得できています。
Date(日付)を比較する方法(compareTo)

また、compareToメソッドを使うことでも、日付の比較が可能です。
値や文字列のどちらが大きいかや、等しいかを比較できます。
比較結果の返り値は、それぞれ次の通りです。
- 比較対象が引数と等しい場合は 0
- 比較対象が引数より小さい場合は -1
- 比較対象が引数より大きい場合は 1
同じく、サンプルコードで確認してみましょう。
■記述例
import java.time.LocalDate;
public class Main{
public static void main(String[] args){
LocalDate dateOld = LocalDate.of(2019, 10, 01);
LocalDate dateNew = LocalDate.of(2020, 12, 28);
if (dateOld.compareTo(dateNew) > 0) {
System.out.println(dateOld + "は" + dateNew + "よりも未来です");
}
if (dateOld.compareTo(dateNew) < 0) {
System.out.println(dateOld + "は" + dateNew + "よりも過去です");
}
if (dateOld.compareTo(dateNew) == 0) {
System.out.println(dateOld + "は" + dateNew + "と同じ日付です");
}
}
}
■実行結果
mbp:Desktop potepan$ java Main
2019-10-01は2020-12-28よりも過去です
記述方法は異なりますが、実行結果は isAfter / isBefore / isEqual と同様です。
Date(日時)を比較する方法(LocalDateTime)

日付だけでなく、時間も比較したい場合は LocalDateTime を使います。
基本的な使い方は、 LocalDate と同様です。
実際の動きをサンプルコードで確認してみます。
■記述例
import java.time.LocalDateTime;
public class Main{
public static void main(String[] args){
LocalDateTime dateTimeOld = LocalDateTime.of(2020, 12, 28, 8, 0, 0);
LocalDateTime dateTimeNew = LocalDateTime.of(2020, 12, 28, 16, 0, 0);
if (dateTimeOld.isAfter(dateTimeNew)) {
System.out.println(dateTimeOld + "は" + dateTimeNew + "よりも未来です");
}
if (dateTimeOld.isBefore(dateTimeNew)) {
System.out.println(dateTimeOld + "は" + dateTimeNew + "よりも過去です");
}
if (dateTimeOld.isEqual(dateTimeNew)) {
System.out.println(dateTimeOld + "は" + dateTimeNew + "と同じ日付です");
}
}
}
■実行結果
mbp:Desktop potepan$ java Main
2020-12-28T08:00は2020-12-28T16:00よりも過去です
このように、時間も含めて過去・未来を比較できています。
時間まで比較したい場合は、LocalDateTime で日時を設定し、比較を行いましょう!
Date(日時)を比較する方法(Date)

日時は、Dateクラスの「beforeメソッド」「afterメソッド」を使っても比較可能です。
使い方は「isBefore」「isAfter」と同じです。
また、日付の指定にCalendarクラスも使ってみましょう。
次のように記述できます。
■記述例
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Calendar;
public class Main{
public static void main(String[] args){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MMM/d HH:mm:ss");
Date date = new Date();
Calendar cOld = Calendar.getInstance();
Calendar cNew = Calendar.getInstance();
cOld.set(2020, 12 - 1, 28, 7, 0, 0); // Calendarクラスの month は、実際の月の-1で表されるため調整
cNew.set(2020, 12 - 1, 28, 23, 0, 0);
Date dateOld = cOld.getTime();
Date dateNew = cNew.getTime();
if(dateOld.after(dateNew)) {
System.out.println(sdf.format(dateOld) + " は " + sdf.format(dateNew) + " よりも未来です");
}
if(dateOld.before(dateNew)) {
System.out.println(sdf.format(dateOld) + " は " + sdf.format(dateNew) + " よりも過去です");
}
}
}
Calendarクラスで日時を set することで、日時を比較できるようにしています。
また、SimpleDateFormat で表示させる文章のフォーマットを整えています。
この辺りはお好みで調整すると良いでしょう。
実行結果は次の通りです。
■実行結果 mbp:Desktop potepan$ java Main 2020/12月/28 07:00:00 は 2020/12月/28 23:00:00 よりも過去です
こちらも、ちゃんと日時を比較できているのがわかります。
なお、DateクラスでもcompareToメソッドは使用可能です。
■記述例
if(dateOld.compareTo(dateNew) > 0) {
System.out.println(sdf.format(dateOld) + " は " + sdf.format(dateNew) + " よりも未来です");
}
if(dateOld.compareTo(dateNew) < 0) {
System.out.println(sdf.format(dateOld) + " は " + sdf.format(dateNew) + " よりも過去です");
}
結果は上記同様です!
等しいかどうかも、当然比較できます。
Date型でNULLかどうか比較

Date型の変数の値が、NULLかどうか比較する場合は「== null」もしくは「!= null」でチェックできます。
シンプルな方法ですが、ちゃんとNULLが入っているかどうか確認できるので、覚えておくと良いでしょう。
次のように記述できます。
■記述例
import java.util.Date;
public class Main{
public static void main(String[] args){
Date date = new Date();
if ( date != null ) {
System.out.println("date は null ではありません");
} else {
System.out.println("date は null です");
}
date = null;
if ( date == null ) {
System.out.println("date は null です");
} else {
System.out.println("date は null ではありません");
}
}
}
■実行結果
mbp:Desktop potepan$ java Main
date は null ではありません
date は null です
このように、NULLの比較ができました。