【Java入門】Dateクラスで日付の比較(compareTo/before/after)

こんにちは!エンジニアの中沢です。

Javaには日付や時刻を取り扱うDateクラスやCalendarクラスがあります。日時は比較して、どちらが先かどうかを判定することができます。この記事では、

Dateクラスとは?
現在日時を取得する方法を知りたい

という基本的な内容から、

  • 日付を比較する方法
  • 日付の比較の注意点

などの応用的な使い方に関しても解説していきます。今回はこれらの方法を覚えるために、日時の比較をするさまざまな使い方をわかりやすく解説します!

なお、Javaの記事については、こちらにまとめています。

目次

Dateクラスとは

Dateクラスとは年月日時間を扱うためのクラスです。このクラスを使えば、単純に現在の日付と時刻の取得といったシンプルなプログラムから、ストップウォッチやカウントダウン式タイマープログラムの開発ができるようになります。

更に普段To-Doリストアプリで、時刻になったら通知する機能もこのDateクラスで管理が可能です。

現在日時を取得する方法

ここでは、Dateクラスを使って現在日時を取得する方法を解説します。Dateクラスを使うには、「import java.util.Date」のインポート文が必要です。現在日時を取得する方法を次のプログラムで確認してみましょう。

import java.util.Date;

public class Main {

    public static void main(String[] args) {

        Date date = new Date();
        System.out.println("現在の時刻は" + date + "です");
    }

}

実行結果:

現在の時刻はTue May 01 13:04:42 JST 2018です

このようにして、現在の日時を取得することができました。

日付を比較する方法

Dateクラスのbeforeメソッド

Dateクラスのbeforeメソッドは、指定された日付より前にあるかどうかを判定するために使用します。beforeメソッドの使い方を次のプログラムで確認してみましょう。

import java.util.Date;

public class Main {

    public static void main(String[] args) {

        Date date1 = new Date(2018, 5, 1, 13, 10, 20);
        Date date2 = new Date(2018, 5, 1, 13, 10, 21);

        System.out.println(date1.before(date2));
        System.out.println(date2.before(date1));
    }
}

実行結果:

true
false

Dateクラスのafterメソッド

Dateクラスのafterメソッドは、指定された日付より後にあるかどうかを判定するために使用します。afterメソッドの使い方を次のプログラムで確認してみましょう。

import java.util.Date;

public class Main {

    public static void main(String[] args) {

        Date date1 = new Date(2018, 5, 1, 13, 10, 20);
        Date date2 = new Date(2018, 5, 1, 13, 10, 21);

        System.out.println(date1.after(date2));
        System.out.println(date2.after(date1));
    }
}

実行結果:

false
true

DateクラスのcompareToメソッド

ここでは、compareToメソッドで比較する方法を解説します。compareToメソッドの戻り値は、次のようになります。

  • メソッドの呼び出し元の値が、引数と等しい場合は0
  • メソッドの呼び出し元の値が、引数より前の場合は-1
  • メソッドの呼び出し元の値が、引数より後の場合は1

compareToメソッドの使い方を次のプログラムで確認してみましょう。

import java.util.Date;

public class Main {

    public static void main(String[] args) {

        Date date1 = new Date(2018, 5, 1, 13, 10, 20);
        Date date2 = new Date(2018, 5, 1, 13, 10, 21);

        System.out.println(date1.compareTo(date2));
        System.out.println(date2.compareTo(date1));
        System.out.println(date1.compareTo(date1));
    }
}

実行結果:

-1
1
0

このようにcompareToメソッドを使って日時を比較することができました。

CalenderクラスのcompareToメソッド

Dateクラスだけではなく、Calenderクラスでも同じように比較ができます。最近ではCalenderクラスを使うほうが主流ですので、こちらも覚えておきましょう。

import java.util.Calendar;

public class Main {

    public static void main(String[] args) {

        Calendar cal1 = Calendar.getInstance(); // cal1のインスタンスを生成
        Calendar cal2 = Calendar.getInstance(); // cal2のインスタンスを生成

        cal1.set(2018, 5, 1, 13, 10, 20); // それぞれ値をセット
        cal2.set(2018, 5, 1, 13, 10, 21);

        System.out.println(cal1.compareTo(cal2));
        System.out.println(cal2.compareTo(cal1));
        System.out.println(cal1.compareTo(cal1));
    }
}

実行結果:

-1
1
0

CalenderクラスでもcompareToメソッドを使って比較できることが確認できました。compareToメソッドの詳しい使い方はこちらの記事で解説しているので、ぜひ確認してください。

日付の比較の注意点

compareToメソッドで比較をする場合、ミリ秒単位まで同じ値を指定しないと、同じ日時と判定されないので、戻り値は「0」になりません。日付が同じでも、時刻が違えば、違う日時と判定します。

また、戻り値の「0」や「1」はインデックスではないので注意してください。

Dateクラスについてもっと詳しく知りたい方へ

Dateクラスのさまざまな使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!

まとめ

いかがでしたか?今回は日時を比較する方法を解説しました。日時を比較するメソッドはいくつもあるので、うまく使い分けてくださいね。もし、日時を比較する方法を忘れてしまったらこの記事を確認してください!

この記事を書いた人

フリーランスエンジニア。
システム開発からコンテンツ作成まで幅広く対応します。

連絡先はこちらです。
ntakeshi@sejuku.net

目次