概要
- チェックする対象の日付が今日より前か後か当日かを調べたい
- ただしチェックする対象の日付は時刻が00:00:00なので日付だけ比較したい
-
new Date()
で生成した今日の日付は時刻まで入っている- 比較すると日付が一緒でも時刻が違うと当日判定にならない
実現方法
使うメソッド
-
java.util.Date
のメソッドを使って前後比較をします - 言わずと知れた
org.apache.commons.lang3
のDateUtils
を使います
UseMethod
java.util.Date.equals(Object obj)
java.util.Date.before(Date when)
java.util.Date.after(Date when)
org.apache.commons.lang3.time.DateUtils.truncate(Date date, int field)
サンプル
DateUtilService.java
public void printDate(Date targetDate) {
// 今日の00:00:00を取得
Date today = DateUtils.truncate(new Date(), Calendar.DAY_OF_MONTH);
if (targetDate.equals(today)) {
System.out.println("今日です。");
} else if (targetDate.after(today)) {
System.out.println("今日より後の日付です。");
} else if (targetDate.before(today)) {
System.out.println("今日より前の日付です。");
}
}
解説
-
DateUtils.truncate
の第1引数にはゼロ埋めしたい日付を入れる - 第2引数に
Calendar.DAY_OF_MONTH
を渡す - todayの時刻が00:00:00になるから、targetDateとフォーマットが揃う
- あとはequals、after、beforeで前後関係を調べる
ちなみに
DateUtils.isSameDay
を使う方法
当日かどうかだけならDateUtils.isSameDay
を使えば、truncateで00:00:00にしなくても日付だけ比較してbooleanを返してくれます。
※今回はbeforeとafterを使いたかったのでゼロ埋めしました
ゼロにする位置を変える場合
DateUtils.truncate
の第2引数に渡す変数次第でゼロにする位置を変えられます。
int field | ゼロになる位置 |
---|---|
Calendar.DAY_OF_MONTH | 00:00:00 |
Calendar.HOUR_OF_DAY | XX:00:00 |
Calendar.MONTH | 1日の00:00:00 |
Calendar.YEAR | 1/1の00:00:00 |
参考
【Java】Dateの時分秒を切り捨てる方法
Class DateUtils|org.apache.commons.lang3.time