
commons-langで時刻を操作・判定する--commons-langの便利メソッド
第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メソッドで時刻を「指定した文字列表現」で簡単に出力することができる。
- 新着記事
- 特集
- ブログ
- 企画特集
-
さあ、クラウドで解決しよう。
-
講演の見どころを紹介
-
いまあるデータで身近な業務をDX
-
連載!プロが語るストレージ戦略
-
次の一手はこれだ!
-
利便性とセキュリティの両立
-
連載!プロが語るストレージ戦略
-
データの散在と非常率運用がネック
-
内部不正や不注意をどう防ぐ?
-
企業DXのキモはクラウドにあり
-
保育業界のDX(後編)
-
特集:IT最適化への道
-
請求書がきてからでは遅い
-
いままさに社会にとっての転換点
-
ビッグデータ最前線!
-
ゼロトラストに不可欠なID管理
-
モバイルデバイスもターゲットに!
-
いまさら聞けない「PPAP」
-
連載!プロが語るストレージ戦略
-
セキュリティの今を知る
-
デジタルを当たり前と言えるか?
-
話題のセキュリティ事故体験ゲーム
-
保育業界のDX(前編)
-
明日からではもう遅い?!
-
IDaaSって何?