import java.util.Date;
import java.text.SimpleDateFormat;
// 今日と特定の日を比較したい
Date today = new Date(); // 比較対象1 Wed Jun 18 08:52:41 JST 2014
String certainDay = "2014-06-18"; // 比較対象2
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date cdDate = sdf.parse(certainDay);
// 時刻を気にせずに、日付だけ比較したいが・・・
System.out.println(today.after(cdDate)); // falseになってほしいがtrue
System.out.println(today.before(cdDate)); // false
System.out.println(today.compareTo(cdDate)); // 0になってほしいが1
予期した結果が出ないのは、
todayは現在時刻を指しているのに、
certainDayは6月18日の00時00分00秒を指しているから。
DBの値と現在時刻を比較する必要があるような時、
DBの値が「yyyy-MM-dd」(時分秒を持っていない)の形式の日付型だった場合、
現在時刻を取得した後は時分秒を取り除いてから比較する必要があります。
そこで
import java.util.Date;
import org.apache.commons.lang.time.DateUtils;
Date now = new Date(); // 2014-06-18 09:53:12
Date truncYear = DateUtils.truncate(now, Calendar.YEAR); // 2014-01-01 00:00:00
Date truncMonth = DateUtils.truncate(now, Calendar.MONTH); // 2014-06-01 00:00:00
Date truncDay = DateUtils.truncate(now, Calendar.DAY_OF_MONTH); // 2014-06-18 00:00:00
参考
http://javatechnology.net/java/dateutils-truncate/
ちなみに、Joda-Timeというライブラリもあるらしい。
import org.joda.time.DateTime;
import org.joda.time.DateTimeFormat;
DateTime tdy = new DateTime(); // 2014-06-18T09:12:35.776+09:00
today = tdy.toString("yyyy-MM-dd"); // 2014-06-18
DateTimeFormat.forPattern("yyyy-MM-dd").parseDateTime("2011-10-31");
参考
http://www.mwsoft.jp/programming/java/joda_time_sample.html