LoginSignup
31

More than 5 years have passed since last update.

Javaで日付だけを比較

Last updated at Posted at 2014-06-18
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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31