commons-langで時刻を操作・判定する--commons-langの便利メソッド

山崎良
2008-08-05 18:00:00
  • このエントリーをはてなブックマークに追加

 第7回はDateUtilsクラスのメソッドを中心に紹介しよう。DateUtilsは日付に関する便利なメソッドを提供してくれるクラスだ。

  • DateUtils#addDays
  • DateUtils#addMonths
  • DateUtils#setYears
  • DateUtils#isSameDay
  • DateUtils#truncate
  • DateFormatUtils#format

 今回の解説のために書いたコードの全文は以下のとおりである。

// 現在時刻を取得する……(1)
Date nowDate = new Date();
System.out.println("01.nowDate:"+nowDate);

// 現在時刻から一日進めた時刻を取得する……(2)
Date tomorrowDate = DateUtils.addDays(nowDate, 1);
// 現在時刻を出力する(引数で渡したDate型が変更されないことを確認)
System.out.println("02.nowDate:"+nowDate);
// 現在時刻から一日進めた時刻を出力する
System.out.println("03.tomorrowDate:"+tomorrowDate);

// 現在時刻から一日戻した時刻を取得する……(3)
Date yesterdayDate = DateUtils.addDays(nowDate, -1);
System.out.println("04.yesterdayDate:"+yesterdayDate);

// 現在時刻から一カ月進めた時刻を取得する……(4)
Date nextMonthDate = DateUtils.addMonths(nowDate, 1);
System.out.println("05.nextMonthDate:"+nextMonthDate);

// 現在時刻の「年」を2010年に変更した時刻を取得する……(5)
Date date2010 = DateUtils.setYears(nowDate, 2010);
System.out.println("06.date2010:"+date2010);

// 現在日付を文字列から生成する
Date todayDate = new SimpleDateFormat("yyyy/MM/dd").parse("2008/07/30"); 
// 最初に取得した現在時刻と生成した日付が「同じ日付であるかどうか」を判定する……(6)
boolean isSameDay = DateUtils.isSameDay(nowDate, todayDate);
// 生成した現在日付を出力する
System.out.println("07.todayDate:"+todayDate);
// 日付を比較した判定結果を出力する(Hour以下が異なっても結果は真となる)
System.out.println("08.isSameDay:"+isSameDay);

// 「日」より下のフィールドを切り捨てた時刻を取得する……(7)
Date dateTruncate = DateUtils.truncate(nowDate, Calendar.DAY_OF_MONTH);
System.out.println("09.dateTruncate:"+dateTruncate);

// 現在時刻を「yyyy/MM/dd」の形式で出力……(8)
String nowDateString = DateFormatUtils.format(nowDate, "yyyy/MM/dd");
System.out.println("10.nowDateString:"+nowDateString);

(1)現在時刻を取得して出力する

Date nowDate = new Date();
System.out.println("01.nowDate:"+nowDate);

 実行結果

01.nowDate:Wed Jul 30 10:22:26 JST 2008

 このコードを実行した時刻が「2008/07/30 10:22:26」であるため、このように出力された。この時刻はこの後の説明でも現在時刻として使用する。

(2)DateUtils#addDaysで明日の日付を取得する

// 現在時刻から一日進めた時刻を取得する。結果は返り値で受け取る(引数で渡したDate型は変更されない)
Date tomorrowDate = DateUtils.addDays(nowDate, 1);
// 現在時刻を出力する(引数で渡したDate型が変更されないことを確認)
System.out.println("02.nowDate:"+nowDate);
// 現在時刻から一日進めた時刻を出力する
System.out.println("03.tomorrowDate:"+tomorrowDate);

 実行結果

02.nowDate:Wed Jul 30 10:22:26 JST 2008
03.tomorrowDate:Thu Jul 31 10:22:26 JST 2008

 DateUtils#addDaysメソッドは指定したDateの「日」を進める。結果は返り値で取得し、引数で渡したnowDateの値は変更されないことに注意しよう。

(3)DateUtils#addDaysで昨日の日付を取得する

Date yesterdayDate = DateUtils.addDays(nowDate, -1);
System.out.println("04.yesterdayDate:"+yesterdayDate);

 実行結果

04.yesterdayDate:Tue Jul 29 10:22:26 JST 2008

 第2引数にマイナスの値を指定することで過去の時刻を取得することができる。

(4)現在時刻から一カ月進めた時刻を取得する

Date nextMonthDate = DateUtils.addMonths(nowDate, 1);
System.out.println("05.nextMonthDate:"+nextMonthDate);

 実行結果

05.nextMonthDate:Sat Aug 30 10:22:26 JST 2008

 DateUtils#addMonthsメソッドで「月」を進めることができる。DateUtilsには他にも「addYears」「addHours」「addSeconds」など、各項目の値を相対的に変更するメソッドが存在する。

(5)「年」を変更する

Date date2010 = DateUtils.setYears(nowDate, 2010);
System.out.println("06.date2010:"+date2010);

 実行結果

06.date2010:Fri Jul 30 10:22:26 JST 2010

 DateUtils#setYearsメソッドで「年」の値を直接指定することができる。DateUtilsには他にも「setMonths」「setDays」「setHours」など、各項目を直接指定するメソッドが存在する。

(6)2つの時刻が示す「日付」が同じであるかどうかを比較する

// 現在日付を生成する
Date todayDate = new SimpleDateFormat("yyyy/MM/dd").parse("2008/07/30"); 
// 最初に取得した現在時刻と生成した日付を比較する
boolean isSameDay = DateUtils.isSameDay(nowDate, todayDate);
System.out.println("07.todayDate:"+todayDate);
System.out.println("08.isSameDay:"+isSameDay);

 実行結果

07.todayDate:Wed Jul 30 00:00:00 JST 2008
08.isSameDay:true

 ここでは文字列から今日の日付(ここでは"2008/07/30")を生成して「最初に取得した現在時刻」と比較する。DateUtils#isSameDayメソッドを使用することで「日付」が同じかどうかを判定することができる。「時(Hour)」以下が異なっても結果が真となる。

(7)「日」より下の項目を切り捨てた時刻を取得する

Date dateTruncate = DateUtils.truncate(nowDate, Calendar.DAY_OF_MONTH);
System.out.println("09.dateTruncate:"+dateTruncate);

 実行結果

09.dateTruncate:Wed Jul 30 00:00:00 JST 2008

 DateUtils#truncateメソッドで「日」より下の項目を切り捨てたため「時」「分」「秒」の値が全て0になる。

(8)現在時刻を「yyyy/MM/dd」の形式で出力する

String nowDateString = DateFormatUtils.format(nowDate, "yyyy/MM/dd");
System.out.println("10.nowDateString:"+nowDateString);

 実行結果

10.nowDateString:2008/07/30

 DateFormatUtils#formatメソッドで時刻を「指定した文字列表現」で簡単に出力することができる。

  • 新着記事
  • 特集
  • ブログ