アプリ版:「スタンプのみでお礼する」機能のリリースについて

引数で日付を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 が格納されたリスト

A 回答 (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 …
    • good
    • 0

Calendar(GregorianCalendar)の


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

やったことがないので自信なしにしておきます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!