10

どのように機能するかを理解しようとしていますjava.util.Calendar.get(java.util.Calendar.WEEK_OF_YEAR)が、いくつかの点が欠けているようです。

String time = "1998-12-31"; // year month day
java.util.Calendar date = java.util.Calendar.getInstance();
date.setTime((new java.text.SimpleDateFormat("yyyy-MM-dd")).parse(time));
System.err.println("Week of year = " + date.get(java.util.Calendar.WEEK_OF_YEAR));
// Week of year = 1 Why ???

なぜdate.get(java.util.Calendar.WEEK_OF_YEAR)その年の最後の週に1を返すのですか?

さらに、WEEK_OF_YEARfor"1998-01-01"は1、for"1998-12-23"は52です。
この動作の説明はありますか?

4

2 に答える 2

12

java.util.Calendar javadocから:

最初の週

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

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

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

この動作は、Calendar#setMinimalDaysInFirstWeek(int)を使用して変更できます。

于 2012-06-05T08:02:54.303 に答える
8
于 2014-02-07T11:57:24.620 に答える