【Java】Play Framework 2.7で環境構築!【IntelliJ IDEA】
野田竣介
フェルメール株式会社
今回はこのような質問をいただきました。
日付の比較ってイマイチわからない…
いろいろやり方あるけど、どれも少しわかりにくいんですよね。
そこで今回はこちらの質問について解説していきます!
実際に今日と明日のLocalDateTimeを使って比較してみたいと思います。
こんな感じで定義してみました。
LocalDateTime now = LocalDateTime.now();
LocalDateTime tomorrow = now.plusDays(1);
isBefore, isAfterを使って比較してみます。
compareToよりも直感的でわかりやすい!
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
isBeforeもisAfterも同じ時間は含まれないみたいですね。
でも実は同じ場合は普通に判定できちゃいます。
boolean result1 = now == now;
boolean result2 = now == tomorrow;
System.out.println("今日は今日?:" + result1);
System.out.println("今日は明日?:" + result2);
今日は今日?:true
今日は明日?:false
少しわかりにくいけど、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
isBefore, isAfterを使う場合はこんな感じ。
boolean before = now.isBefore(tomorrow);
boolean after = now.isAfter(tomorrow);
System.out.println("今日は明日の前?:" + before);
System.out.println("今日は明日の後?:" + after);
compareToを使う場合はこんな感じ。
System.out.println("今日 - 明日 = " + now.compareTo(tomorrow));
System.out.println("明日 - 今日 = " + tomorrow.compareTo(now));
System.out.println("今日 - 今日 = " + now.compareTo(now));
使いやすいほうを使えば良いと思いますが、プロジェクト内では統一しておきたいですね!
compareToはわかりにくいと思っていたけど、そんなことはなかった。
ただの引き算だと思って使えば簡単ですね。
isBefore, isAfterは例文のように英語を翻訳するイメージで覚えました。
A.isBefore(B) → A is before B → AはBの前です
日付を比較する場面は多いと思うので覚えておきたいですね!