7

パラメータとして送信される曜日に基づいて、1週間のすべての曜日(MONからSUN)の数値を取得する必要があります。

たとえば、
5月2日を過ぎると、実際には今週の配列[30,1,2,3,4,5,6]を取得します。
または、5月16日を過ぎると、配列[14,15,16,17,18,19,20]を取得します。

このコードを使おうとしましたが、今日から7日後に返されます。

        //get which week of month
        Calendar now = Calendar.getInstance();
        now.set(mYear, mMonth, Integer.parseInt(extractedDay));
        int weekOfMonth = now.get(Calendar.WEEK_OF_MONTH);

        //get all days of clicked week
        SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
        Calendar calendar = Calendar.getInstance();
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.set(mYear, mMonth, Integer.parseInt(extractedDay));

        String[] days = new String[7];
        for (int i = 0; i < 7; i++)
        {
            days[i] = format.format(calendar.getTime());
            calendar.add(Calendar.DAY_OF_MONTH, 1);
        }

しかし、これは私が必要としているものではありません。今日(THU)を過ぎて、5月の今週の日付を取得する必要があります-4月30日月曜日から5月6日日曜日まで。

編集

月のどの週かを検出するコードがあることに気づきました。このデータを使用して月曜日の日付を設定する方法はありますか?たとえば、5月16日を過ぎた後、5月の第3週であることが検出され、変数firstDayOfWeek(新しい変数)を5月14日に設定しました。

4

4 に答える 4

21

週の最初の日から開始するには、最初に選択した日の平日を引く必要があります。次のコードを試してください。

public static void main(String[] args){
    Calendar now = Calendar.getInstance();

    SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");

    String[] days = new String[7];
    int delta = -now.get(GregorianCalendar.DAY_OF_WEEK) + 2; //add 2 if your week start on monday
    now.add(Calendar.DAY_OF_MONTH, delta );
    for (int i = 0; i < 7; i++)
    {
        days[i] = format.format(now.getTime());
        now.add(Calendar.DAY_OF_MONTH, 1);
    }
    System.out.println(Arrays.toString(days));

}

今日、それは出力します:

[2012年4月30日、2012年5月1日、2012年5月2日、2012年5月3日、2012年5月4日、2012年5月5日、2012年5月6日]

于 2012-05-03T10:46:32.823 に答える
7

あなたの質問はすでに答えられていますが、少し付け加えたいと思います。コードには2つの点で問題があります。

  1. 初期日付にはさまざまなデータ型を使用します(mYearisintおよびexactDayis String?)。
  2. これは、結果の解析、フォーマット、および生成を組み合わせたものです。

それはあなたがコードをテストするのを難しくします!

したがって、私は別のアプローチを提案します。

public class DaysOfCurrentWeek {
    public static void main(String[] args) {
        Date refDate = new Date();

        Date[] days = getDaysOfWeek(refDate, Calendar.getInstance().getFirstDayOfWeek());

        for (Date day : days) {
            System.out.println(day);
        }
    }

    private static Date[] getDaysOfWeek(Date refDate, int firstDayOfWeek) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(refDate);
        calendar.set(Calendar.DAY_OF_WEEK, firstDayOfWeek);
        Date[] daysOfWeek = new Date[7];
        for (int i = 0; i < 7; i++) {
            daysOfWeek[i] = calendar.getTime();
            calendar.add(Calendar.DAY_OF_MONTH, 1);
        }
        return daysOfWeek;
    }
}

コードは次のように機能します。

  1. 参照日を作成します(この例では、を使用するだけnew Date()です)。
  2. getDaysOfWeek()「汚い仕事」をするために呼びなさい。合格することにより、firstDayOfWeekあなたは自由に選択するMONDAYSUNDAY、週の初めとして選択することができます。この例では、カレンダーのデフォルトを使用しています。
  3. 結果を返します-フォーマットされていない、としてDate。このようにして、呼び出し元のコードに何をするかを決定させることができます-それを印刷するか、さらに計算を行います。

これで、フォーマットや参照日がどのように作成されたかを気にすることなく、getDaysOfWeek()メソッドを簡単にテストできます。

于 2012-05-03T11:15:12.580 に答える
1

現在のコードのどこかでこのコード行を使用する必要があります。

calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

少なくともforループの前にある必要があります。

于 2012-05-03T10:26:16.550 に答える
0

日付を 設定した翌日を設定する必要があります

calendar.set(mYear, mMonth, Integer.parseInt(extractedDay)); calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

于 2012-05-03T10:41:05.343 に答える