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

50種類以上のIT教材を無料で使える!
0円から学習できるオンラインITスクール「侍テラコヤ」
→さっそく登録する

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

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

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

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

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

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

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

Dateクラスとは

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

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


【なかなかエラーが解決できない…そんな悩みを解決します!】

登録無料で始められるプログラミングスクール「侍テラコヤ」

・回答率100%のQ&A掲示板でエラーを解決!
現役エンジニアとのオンライン相談で悩みを解決!
・50種類以上の教材で複数言語を習得!

侍テラコヤについて詳しく見る

現在日時を取得する方法

ここでは、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メソッドの詳しい使い方はこちらの記事で解説しているので、ぜひ確認してください。

【Java入門】compareToで大小を比較をする方法総まとめ(文字列/日付)
更新日:2023年3月21日

【なかなかエラーが解決できない…そんな悩みを解決します!】

登録無料で始められるプログラミングスクール「侍テラコヤ」

・回答率100%のQ&A掲示板でエラーを解決!
現役エンジニアとのオンライン相談で悩みを解決!
・50種類以上の教材で複数言語を習得!

侍テラコヤについて詳しく見る

日付の比較の注意点

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

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

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

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

【Java】Dateクラスで日付を扱う方法を5つのパターン別に解説
更新日:2023年3月21日

まとめ

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

プログラミング学習中、
誰かへ相談したいことはありませんか?

SAMURAI TERAKOYA

プログラミングはエラーの連続。作業を進めるなかで誰かに教えてほしい場面は多いですよね。

そんな悩みを解決できるのが、侍テラコヤです。登録無料で始められて、現役エンジニアとオンラインで相談できるほか、回答率100%のQA掲示版でプログラミングに関する悩みを解決します!

気になる方はぜひ詳細をご覧ください。

→侍テラコヤの詳細をみる

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

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

あなたの目的に合わせた
SAMURAI ENGINEERの運営サービス

SAMURAI ENGINEER Pro

未経験でも挫折しないプログラミングスクール

詳細はこちら

SAMURAI TERAKOYA

日本最大級のサブスク型オンラインITスクール

詳細はこちら

SAMURAI ENGINEER Freelance

「一人で稼げる」スキルを身につける

詳細はこちら
Close