【Java】before/after/compareTo/equalsを使って日付を比較する!

日付を比較するにはbeforeやafter、compareTo、equalsメソッドを使用します。
日付は比較して、どちらが先かどうかを判定することができます。

例えば、美容院の予約などで1日前までは予約キャンセルができますが、当日にはキャンセルができなくなり、「電話で問い合わせてください。」という画面が表示されたことがあるかと思います。
その機能にも日付の比較が使用されています。

今回は以下の場合で日付の比較を行います。

beforeメソッドで日付の比較を行う場合
afterメソッドで日付の比較を行う場合
compareToメソッドで日付の比較を行う場合
equalsメソッドで日付の比較を行う場合

beforeメソッドとは

Dateクラスのbeforeメソッドは指定した日付より前にあるかどうかを判定します。

beforeメソッドの書き方

beforeメソッドの構文は下記となります。

beforeのにdate値2を指定することでdate値1とdate値2の値を比較します。
date値1が、date値2よりも日付が前である場合は「true」を、そうでない場合は「false」を返します。

afterメソッドとは

Dateクラスのafterメソッドは、指定した日付より後にあるかどうかを判定します。

afterメソッドの書き方

afterメソッドの構文は下記となります。

afterの()にdate値2を指定することでdate値1とdate値2の値を比較します。
date値1が、date値2よりも日付が後である場合は「true」を、そうでない場合は「false」を返します。

compareToメソッドとは

DateクラスでのcompareToメソッドは日付の比較を行うことができます。

compareToメソッドの書き方

compareToメソッドの構文は下記となります。

()の引数にdate値2を指定することで、date値1とdateの値2を比較するようになります。
比較した場合、一致する場合は「0」を、異なる場合は「0以外」を返します。

equalsメソッドとは

Dateクラスでのequalsメソッドは、日付の比較を行うことができます。

equalsメソッドの書き方

equalsメソッドの構文は下記となります。

()の引数のdate値2を指定することで、date値1とdate値2を比較するようになります。
比較した場合、date値1とdate値2が一致するならtrue、違うならfalseを返します。

日付を比較するサンプルコード

日付を比較するサンプルコードを紹介します。

beforeを使用した場合

出力結果

比較元: 2020/04/02

beforeメソッド
2020/04/01:false
2020/04/02:false
2020/04/03:true

beforeの()の引数の値が2020/04/02よりも後の日付である場合はtrueを返し、2020/04/02よりも前の日付である場合はfalseを返しています。

afterを使用した場合

出力結果

比較元: 2020/04/02

afterメソッド
2020/04/01:true
2020/04/02:false
2020/04/03:false

afterの()の引数の値が2020/04/02よりも前の日付である場合はtrueを返し、2020/04/02よりも後の日付である場合はfalseを返しています。

compareToを使用した場合

出力結果

比較元: 2020/04/02

compareToメソッド
2020/04/01:1
2020/04/02:0
2020/04/03:-1

compareToの()の引数の値が2020/04/02と同じである場合は「0」を、そうでない場合は、日数の差の値を返しています、。

equalsを使用した場合

出力結果

比較元: 2020/04/02

equalsメソッド
2020/04/01:false
2020/04/02:true
2020/04/03:false

equalsの()の引数の値が2020/04/02と同じである場合はtrueを返し、そうでない場合はfalseを返しています。

今回のポイント

日付を比較するには4種類のメソッドがある

日付を比較するにはbefore、after、compareTo、eaualsメソッドを使用する

• Dateクラスのbefore、after、compareTo、equalsメソッドで日付を比較する

• beforeメソッドは、パラメータの日付がインスタンスよりも未来だった場合に「true」を返し、過去だった場合に「false」を返す

• afterメソッドは、パラメータの日付がインスタンスよりも過去だった場合に「true」を返し、未来だった場合には「false」を返す

• compareToメソッドは、パラメータの日付がインスタンスよりも過去だった場合に「正の数値」を、未来だった場合に「負の数値」を返し、等しい場合には「0」を返す

• equalsメソッドは、パラメータの日付がインスタンスと等しかった場合に「true」を戻し、等しくない場合は「false」を返す

補足

Calenderクラスでの日付の比較について

CalendarクラスもDateクラスと同様にbefore、after、compareTo、equalsメソッドを使用して比較ができます。

ただし、Calendarは抽象クラスなので、getInstanceメソッドで取得したインスタンスのクラスが異なる場合があります。
その為、同じ日付ではあるが、equalsメソッドの判定結果が「false」になります。

出力結果

cal1:2020年07月 29日 00時00分 00秒 0
cal2:2020年07月 29日 00時00分 00秒 0

equals :false
compareTo:0

グレゴリオ暦と和暦とでは異なるクラスのため、「eauals」メソッドは必ず「false」を戻します。
その為、暦が異なる「Calendar」インスタンスの比較を行う場合は、before、after、compareToメソッドを使うようにしましょう。

Writer
壷井

壷井

株式会社flyhawkの壷井です。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。

最新の案件情報

フリーランスエンジニアの案件探し