• ベストアンサー

引数で日付を2つ与え、その間の日付リストを取得したい。

引数で日付を2つ与え、 その間の日付リストを取得できるようなメソッドを 作成したいのですが、どのようにすればいいのでしょうか・・? 例えば、以下のような感じです。 ●引数 1. 開始日(Date型) 例> 2003/4/12 2. 終了日(Date型)  例> 2003/6/25 ●戻り値 開始日と終了日の間の日付(Date型)のリスト 例>2003/4/12~2003/6/25までの日付のリスト↓ 4/12, 4/13, 4/14 ・・・・・ 6/23, 6/24, 6/25 が格納されたリスト

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

kawaenさん、こんにちは。 考え方は#1の方の通りです。 穴空けで回答します。 public static List getDateList( Date headDate, Date tailDate ) { // このメソッドの戻り値 List list = null; // 1日加算用 Calendar calendar = null; // リストに追加する要素 Date date = null; // リストを生成します。 list = new ????; // カレンダを生成し、最初の日付を設定します。 // CalendarクラスのgetInstanceメソッド、setTimeメソッドを使います。 calendar = ??? calendar.??? // ループの中で1日ずつ加算して、リストを生成します。 while( true ) { // 現在の日付を取得 // CalendarクラスのgetTimeメソッドを利用します。 date = ???; // 現在の日付が終了日付より未来になったら終了。 // DateクラスのcompareToメソッドを利用します。 if (??? > 0) { break; } // 現在の日付をリストに追加 list.add(date); // 現在の日付を1日加算 // <=>"月の日数"を1増やします。 // Calendarクラスのaddメソッドを利用します。 calendar.add(???, 1) ; } // 生成したリストを戻します。 return list; } rollメソッドは(私は使ったことがなかったので調べてみましたが)、繰り上げ処理が行われないようです。たとえば、以下のように、7/31に1日rollすると7/1となりました。calendar = Calendar.getInstance(); calendar.set(2003, 7 - 1, 31); System.out.println( calendar.getTime() ); calendar.roll(Calendar.DAY_OF_MONTH, 1); System.out.println( calendar.getTime() ); なので今回はaddメソッドを採用しました。rollメソッドはこれはこれで別の機会で使えそうです。知ることが出来て嬉しいです。

参考URL:
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/Calendar.html

その他の回答 (1)

  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.1

Calendar(GregorianCalendar)の roll()メソッドを使えばできるのではないでしょうか。 開始日でGregorianCalendarを初期化して、 roll(Calendar.DATE, true)で一日づつ加算して、 getTime()でDateを得てlistに格納し、 終了日になるまで繰り返すという…。 やったことがないので自信なしにしておきます。

関連するQ&A

専門家に質問してみよう