「DateUtils」は、Commons Langのクラス。
DateやCalendar周りの日付操作ユーティリティ。

DateやCalendarは基礎的な操作は提供するが、
年月日のみの比較というような 実際によく行われる処理についてはない。
このDateUtilsはそこを補う。

使い方

年月日のイコールはisSameDay()

Date型のequals()は、
ミリ秒まで一致しなければtrueにならない。

よって年月日のみ同じかどうか調べる場合は、
年と月と日をそれぞれ取り出して比較しなくてはいけない。

そんなときは、このDateUtils.isSameDay()で一発。

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にする)。

Calendar cal = new GregorianCalendar(2002, 2, 28, 13, 45);
  
//日より下が切り捨てられるので「2002年3月28日0時0分0秒」となる
Date truncated = DateUtils.truncate(cal.getTime(), Calendar.DATE);

フィールド定数とさよならしたい

add()やset()はCalendarで提供されているが、
フィールドに関する定数値を指定しなければならない。

これをCalendarクラスの膨大な定数の中から選ぶのがたいへんで、
違うフィールドを選んでしまっても同じint型なので コンパイルエラーにはならない。

DateUtilsではこれらのフィールドに関する操作をメソッドで提供してる。
また、Date型で受け取ってくれるので いちいちCalendar型に変換する必要もない。

//通常のやり方
Date date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.YEAR,1);
 
//DateUtilsで簡単に
Date date = new Date();
DateUtils.addYears(date, 1);

PR