1

Calendar API は私を混乱させます。私がやろうとしていることは単純に思えますが、実際にはうまくいかないようです。

週の最初の曜日をデフォルトの日曜日ではなく月曜日に設定したい (ロケールによって異なることはわかっているが、常に月曜日を強制したい)。さらに、特定の日付について、それが表す曜日を取得したいと考えています (たとえば、月曜日は 1、日曜日は 7)。

デフォルトの Calendar API でこれを行う方法はありますか? 私は次のようなことを試しました:

Calendar cal = Calendar.getInstance();
cal.setFirstDayOfWeek(Calendar.MONDAY);
cal.setTime(<some Date object that's a monday>);
System.out.println(cal.get(Calendar.DAY_OF_WEEK));

それは 1 ではなく 2 を与えます。それは の値を与えているからCalendar.MONDAYだと思いますが、完全にはわかりません。その疑いに基づいて、次のことが機能します。

Calendar cal = Calendar.getInstance();
cal.setTime(<some Date object that's a monday>);
System.out.println(
    (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) ? 
        7 : cal.get(Calendar.DAY_OF_WEEK) - 1);

...しかし、私はむしろそのifステートメントを持っていません。まっすぐな Cal​​endar API を使ってやりたいことを行う方法はありますか?

4

2 に答える 2

2

Calendar ソースを見ると、setFirstDayOfWeek が実際に影響を与えるのは WEEK_OF_MONTH と WEEK_OF_YEAR の計算だけであることがわかります。週の始まりに関係なく、MONDAY は MONDAY のままであり、カレンダーでは MONDAY の値は 2 です。

于 2013-03-27T18:09:45.407 に答える
0

引用符

週の最初の曜日は、現在のロケールから派生します。カレンダーのロケール (Calendar.getInstance(Locale) または new GregorianCalendar(Locale)) を設定しない場合、システムのデフォルトが使用されます。システムのデフォルトは、JVM パラメータによってオーバーライドできます。

public static void main(String[] args) { カレンダー c = new GregorianCalendar(); System.out.println(Locale.getDefault() + ": " + c.getFirstDayOfWeek()); }

これにより、言語/国ごとに異なる JVM パラメータを持つ別の出力が表示されるはずです。

-Duser.language=en -Duser.country=US -> en_US: 1 (Sunday)
-Duser.language=en -Duser.country=GB -> en_GB: 2 (Monday)

これにより、他の動作も変わる可能性があることを忘れないでください。

引用符

詳細は以下のリンクから

JVM 引数を使用して java.util.Calendar に firstDayOfWeek を指定する方法

于 2013-03-27T18:10:26.360 に答える