ふりぶろぐ
Web Engineer's Blog
Java

【Java】日付の比較をしてみた!【before, after, compareTo】

Java

日付の比較は毎回わからなくなってしまうので残しておきます。

before, after, compareToを使って日付の比較をしてみます。

今回はLocalDateTimeを使うけどDateでも使えるはず。

before, afterを使ったほうがわかりやすいと思うけど、compareToも使ってみます。

できることなら不等号(<, >)で比較したい…

実際に比較してみた

実際に今日と明日のLocalDateTimeを使って比較してみたいと思います。

こんな感じで定義してみました。

LocalDateTime now = LocalDateTime.now();
LocalDateTime tomorrow = now.plusDays(1);

before, after

before, afterを使って比較してみます。

一番わかりやすい比較の方法ですね。

boolean before = now.isBefore(tomorrow);
boolean after = now.isAfter(tomorrow);
System.out.println("今日は明日の前?:" + before);
System.out.println("今日は明日の後?:" + after);

今日は明日の前?:true
今日は明日の後?:false

ちなみにどちらもnowを渡したらどうなるんだろう?

ということでやってみました。

boolean before = now.isBefore(now);
boolean after = now.isAfter(now);
System.out.println("今日は今日の前?:" + before);
System.out.println("今日は今日の後?:" + after);

今日は今日の前?:false
今日は今日の後?:false

beforeもafterも同じ時間は含まれないみたいですね。

でもイコールの場合は普通に判定できるので、それも使えば<=, >=も判定できますね。

boolean result1 = now == now;
boolean result2 = now == tomorrow;
System.out.println("今日は今日?:" + result1);
System.out.println("今日は明日?:" + result2);

今日は今日?:true
今日は明日?:false

compareTo

少しわかりにくいけど、compareToも比較に使えます。

日付だけでなく、文字列や数値にも使えるらしい。

System.out.println("今日 - 明日 = " + now.compareTo(tomorrow));
System.out.println("明日 - 今日 = " + tomorrow.compareTo(now));
System.out.println("今日 - 今日 = " + now.compareTo(now));

今日 – 明日 = -1
明日 – 今日 = 1
今日 – 今日 = 0

A.compareTo(B)の場合、AからBを引くイメージ。

その値がマイナスなら-1、プラスなら1、イコールなら0が返ります。

例文のようにイメージすると結構覚えやすいのかも?

おまけ

Integer x = 1;
Integer y = 2;
System.out.println("x - y = " + x.compareTo(y));
System.out.println("y - x = " + y.compareTo(x));
System.out.println("x - x = " + x.compareTo(x));

String a = "a";
String b = "b";
System.out.println("a - b = " + a.compareTo(b));
System.out.println("b - a = " + b.compareTo(a));
System.out.println("a - a = " + a.compareTo(a));

x – y = -1
y – x = 1
x – x = 0
a – b = -1
b – a = 1
a – a = 0

まとめ

compareToはわかりにくいと思っていたけど、そんなことはなかった。

ただの引き算だと思って使えば簡単ですね。

before, afterに関は例文のように、英語を翻訳するイメージで覚えました。

A.isBefore(B) → A is before B → AはBの前?

日付を比較する場面は多いと思うので、できれば覚えておきたいですね。

ABOUT ME
りーふ
たまにブログを書いてるWebエンジニア。 サーバーサイドメインでインフラとフロントエンドもたまにやります。 Javaが得意。 Play Frameworkが好き。 本業は迷惑をかけない程度に手を抜くスタイル。 意識高い系は苦手。