3

週の開始日を格納する変数がありますが、2012 年から 2013 年に進むと年が更新されません。

日と月が適切に加算されるため、26/12 から 02/01 に正しく移動しますが、2012 のままです。

// roll one week forward
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(mPrefsHelper.getWeekStart());
cal.add(Calendar.WEEK_OF_YEAR, 1);
4

3 に答える 3

1

お詫び申し上げます。ご回答ありがとうございます。私の問題は私のコードに固有のものでした。ある時点で私はこれを行っていました。

mCalendar.clear();
mCalendar.setFirstDayOfWeek(Calendar.MONDAY);
mCalendar.set(Calendar.WEEK_OF_YEAR, week);
mCalendar.set(Calendar.YEAR, year);

以前のコードで取得した日付から取得した値を使用します。

そのため、1週目と2013年の日付(たとえば1月2日水曜日)を取得していました。カレンダーをクリアし、週と年を正しく設定しましたが、このビットをもう一度呼び出して、年を設定していました。どういうわけか2012年になります。基本的にほとんどのシナリオでこのコードを削除しましたが、現在は正常に機能しています。

于 2012-12-24T12:14:07.647 に答える
1

java.util.Calendarの javadoc より

First Week

Calendar は、週の最初の日と最初の週の最小日数 (1 から 7) の 2 つのパラメーターを使用して、ロケール固有の週 7 日を定義します。これらの数値は、Calendar の作成時にロケール リソース データから取得されます。また、値を設定するメソッドを使用して明示的に指定することもできます。

WEEK_OF_MONTH または WEEK_OF_YEAR フィールドを設定または取得する場合、Calendar はその月または年の最初の週を基準点として決定する必要があります。月または年の最初の週は、getFirstDayOfWeek() で始まり、その月または年の少なくとも getMinimalDaysInFirstWeek() 日を含む最も早い 7 日間として定義されます。...、-1、0 の番号が付けられた週は、最初の週に先行します。2、3、...と番号が付けられた週に続きます。get() によって返される正規化された番号付けは異なる場合があることに注意してください。たとえば、特定の Calendar サブクラスは、年の第 1 週の前の週を前年の第 n 週として指定する場合があります。

これはロケール固有です。あなたの場合、週に新年からの日数が含まれている場合、それは新年からの週 1 としてカウントされます。

于 2012-12-24T10:41:13.180 に答える