この記事では、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の比較ができました。