日付の比較は毎回わからなくなってしまうので残しておきます。
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);
ちなみにどちらもnowを渡したらどうなるんだろう?
ということでやってみました。
boolean before = now.isBefore(now);
boolean after = now.isAfter(now);
System.out.println("今日は今日の前?:" + before);
System.out.println("今日は今日の後?:" + after);
beforeもafterも同じ時間は含まれないみたいですね。
でもイコールの場合は普通に判定できるので、それも使えば<=, >=も判定できますね。
boolean result1 = now == now;
boolean result2 = now == tomorrow;
System.out.println("今日は今日?:" + result1);
System.out.println("今日は明日?:" + result2);
compareTo
少しわかりにくいけど、compareToも比較に使えます。
日付だけでなく、文字列や数値にも使えるらしい。
System.out.println("今日 - 明日 = " + now.compareTo(tomorrow));
System.out.println("明日 - 今日 = " + tomorrow.compareTo(now));
System.out.println("今日 - 今日 = " + now.compareTo(now));
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));
まとめ
compareToはわかりにくいと思っていたけど、そんなことはなかった。
ただの引き算だと思って使えば簡単ですね。
before, afterに関は例文のように、英語を翻訳するイメージで覚えました。
A.isBefore(B) → A is before B → AはBの前?
日付を比較する場面は多いと思うので、できれば覚えておきたいですね。
ABOUT ME