スライドショー

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

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

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

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

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

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

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

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

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

日付の比較の注意点

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

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

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

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

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

まとめ

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

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

中沢 丈

中沢 丈

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

連絡先はこちらです。
[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説