DateUtils
Commons Lang3のクラスで、DateやCalendar周りの日付操作ユーティリティ。
Table of Contents
この記事は最終更新から3年以上経過しています。
執筆時バージョン
Java | Java SE 8 |
commons-lang | 3.3.2 |
DateやCalendarは基礎的な操作は提供するが、年月日のみの比較というような 実際によく行われる処理についてはない。DateUtilsはそこを補う。
Date And Time APIが登場しているので、1からDate関連のユーティリティを作るのは気が引ける。DateUtilsに必要な物があれば利用したい。
isSameDay() - 年月日のイコールが判定できる
Date型のequals()はミリ秒まで一致しなければtrueにならない。 よって年月日のみ同じかどうか調べる場合は、年と月と日をそれぞれ取り出して比較しなくてはいけない。そんなときは、このDateUtils.isSameDay()で一発。
DateUtils.isSameDay()の例
//比較のためsecondDateは1ミリ秒をずらしておく
long currentTimeMillis = System.currentTimeMillis();
Date firstDate = new Date(currentTimeMillis);
Date secondDate = new Date(currentTimeMillis + 1);
//ミリ秒が一致しないのでfalse
boolean isEqual = firstDate.equals(secondDate);
//(ミリ秒が一致しないが)年月日が同じなのでtrue
boolean isSameDay = DateUtils.isSameDay(firstDate, secondDate);
truncate() - 不要な範囲をばっさりを切り捨てる
Date型はミリ秒まで扱うが年月日のみ扱いたい場合もある。こういった場合、時分秒などは0に設定しておきたいが面倒な作業である。 そんなときは1つ1つ設定するのではなく、truncateで範囲を指定してばっさり切る(0にする)。
DateUtils.isSameDay()の例
Calendar cal = new GregorianCalendar(2002, 2, 28, 13, 45);
//日より下が切り捨てられるので「2002年3月28日0時0分0秒」となる
Date truncated = DateUtils.truncate(cal.getTime(), Calendar.DATE);
addDays(),setDays() - Calendarのフィールド定数とさよならする
add()やset()はCalendarで提供されているが、フィールドに関する定数値を指定しなければならない。これをCalendarクラスの膨大な定数の中から選ぶのがたいへんで、間違えたフィールドを選んでしまっても同じint型なので コンパイルエラーにはならない。
DateUtilsではこれらのフィールドに関する操作をメソッドで提供してる。また、Date型で受け取ってくれるので いちいちCalendar型に変換する必要もない。
Calendarを用いた日付操作
Date date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DATE,1);
DateUtilsを用いた日付操作
Date date = new Date();
DateUtils.addDays(date, 1);
Appendix B: 改訂履歴
-
v1.0 ,2014-10-06: 初稿