Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

この記事では、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メソッドを使うことでも、日付の比較が可能です。

値や文字列のどちらが大きいかや、等しいかを比較できます。

比較結果の返り値は、それぞれ次の通りです。

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の比較ができました。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。