4

java.util.Calendarを介して、Javaの特定の日付に関する情報(週、月、年などの日数など)を取得しています。私の状況でカレンダーオブジェクトのロケールを設定する理由はありますか?私は理由を尋ねています:

System.out.println(cal.get(Calendar.DAY_OF_WEEK));

今日(日曜日)の戻り値は常に1ですが、ロケール(cs_CZ)では7である必要があります。

Locale locale = new Locale("cs", "CZ");
TimeZone tz = TimeZone.getTimeZone("Europe/Prague");

Calendar cal = GregorianCalendar.getInstance(tz, locale);
cal.setTime(new Date());

// returns => 1 (but I expected 7)
System.out.println(cal.get(Calendar.DAY_OF_WEEK)); 
// returns => 3 - it's OK
System.out.println(cal.get(Calendar.DAY_OF_MONTH));

編集:私は日曜日に1で手間をかけることができますが、使用されているロケールまたはタイムゾーンに関係なく、これが不変の動作であることを確認する必要があります。

4

2 に答える 2

10

ロケールは週の最初の日に影響します。ただし、日の値は定数であり、常に1です。このリンクSUNDAYを確認できます。このメソッドは正しいフィールド値を返すだけです(7を返す場合は間違っています。7は現在の日ではありません)。get()SATURDAY

ただし、呼び出すことができgetFirstDayOfWeek()、2()を返しますMONDAY。これがあなたに必要なものだと思います。これらの2つの方法を使用して、目標を達成できます。

System.out.println((cal.get(Calendar.DAY_OF_WEEK) - cal.getFirstDayOfWeek() + 7) % 7 + 1);

上記のステートメントは7を返します。

于 2013-03-03T14:09:27.883 に答える
-7

最後に、JodaTimeライブラリを使用しました。

DateTime dt = new DateTime(new Date());
int dayOfWeek = dt.getDayOfWeek();

今日(日曜日)は7を返します。

于 2013-03-03T17:37:22.263 に答える