JavaTips

Javaの日付比較はCalendarクラスを使用【シンプルに解説】

2019/12/14

インターネット
Java初心者
Javaの日付比較処理が知りたい。。注意しなきゃいけない事とかあるのかな??

上記悩みに答えます。

 執筆者

たけ
大手SI企業の現役Javaエンジニアです。Java Goldの資格を保有しています。

Javaの日付比較はCalendarクラスを使用

サイバー空間

日付比較はCalendarクラスを利用すればOKです。
日付比較を行うメソッドを解説します。

Javaの日付比較プログラム(before、after、compareTo)

日付比較処理になます。
before」、「after」、「compareTo」メソッドを使用しています。

 実行結果

日付比較で使用するメソッドです。

  1. before
  2. after
  3. compareTo

各メソッドの役割を解説します。

 beforeメソッド

指定されたObjectの表す時間より前の時間を表すかどうかを返します。

上記プログラムでは、「cal1 < cal2」の為、「true」が返却されます。

 after

指定されたObjectの表す時間より後の時間を表すかどうかを返します。

上記プログラムでは、「cal1 < cal2」の為、「false」が返却されます。

 compareTo

2つのCalendarオブジェクトで表される時間値(元期からのミリ秒単位のオフセット)を比較します。

少し分かりにくいですが、処理毎に返却される値をまとめました。

compareToメソッドまとめ

「a.compareTo(b)」のケース

  1. 「a < b」の場合…「-1」が返却されます
  2. 「a > b」の場合…「1」が返却されます
  3. 「a == b」の場合…「0」が返却されます

 よくある疑問

Java初心者
compareToだけで日付比較すれば良いのでは?

ここまでで、上記の疑問が出てくるかと思います。

実はJava内部では「before」「after」ともに「compareTo」メソッドを実行しています

参考※Calendarクラスのbeforeメソッド

なぜ「before」と「after」メソッドを使用するかというと、、

ポイント

プログラムのコードを見ただけで過去と未来、どちらの比較を行いたいか理解出来るからです。

先程「compareTo」メソッドの実行例を記載しましたが、プログラムだけ見ても、理解するまでに時間がかかりそうですよね。

なので、日付比較を行う際は「before」と「after」メソッドを使用して下さい

JavaのCalendarクラスの注意点

ここからはCalndarクラスを利用する際の注意点を記載します。

 注意点
Calendarクラスを利用する際は、「clear」メソッドを呼び出してください

「clear」メソッドを実行しなかったプログラム

 実行結果

実行結果の「5行目」と「6行目」でカレンダーのミリ秒が表示されていますが、誤差が出ている為、年月日は同じですが、結果は「-1 (cal1が過去日)」となっています。

これは「compareTo」メソッドの内部では「ミリ秒」での比較を行っているからです。
「ミリ秒」のズレを防ぐ為に、「clear」メソッドを呼び出す習慣をつけてください

 「clear」メソッドを実行した場合の結果

ミリ秒の誤差が無くなっていますね!

今回は以上になります。

人気記事Java初心者にオススメの入門書籍2冊【現役エンジニアが厳選選択】

-JavaTips

Copyright© JavaSkillHacks , 2021 All Rights Reserved.