4

私の問題は一見非常に単純です。GregorianCalendar オブジェクトからカレンダー グラフィック ユーザー インターフェイスを作成し、そのメソッドを使用して、異なる月の正確な日数と、異なる日付に対応する平日を計算します。

しかし、平日は一貫して1日休みです。カレンダーによると、2013 年 7 月 1 日は「2」であり、私の住む地域では火曜日を意味します。月曜日は '1' だったはずです。"簡単!" 私は考えて、次の行に入れます: c.setFirstDayOfWeek(Calendar.MONDAY); しかし、反応はありません。

だから私は答えを求めてstackoverflowを検索しますが、私の問題を抱えている人は皆、1月が1ではなく0であることを忘れているようです。だから今私は立ち往生しています。

単純化されたコードとして、対応する出力を含む非常に短いコードを作成しました。

    GregorianCalendar c = new GregorianCalendar();
    c.setFirstDayOfWeek(Calendar.MONDAY);
    c.set(Calendar.MONTH, 6);
    c.set(Calendar.DAY_OF_MONTH, 1);
    c.set(Calendar.YEAR, 2013);

    SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-YYYY");
    System.out.println(sdf.format(c.getTime()));
    System.out.println(c.get(Calendar.DAY_OF_WEEK));

出力は次のとおりです。

2013 年 1 月 7 日

2

明らかに間違いである症状を誤って修正するために、コードに「-1」を入れることを拒否します。助けていただければ幸いです。

4

5 に答える 5

2

java.time

日付処理には、Java の最新の日付と時刻の API である java.time を使用することをお勧めします。Arvind Kumar Avinash はすでに回答で、その優れたアプリケーションを示しています (+1)。

私があなたの質問を理解する方法は、あなたが月曜日を週の最初の日にしたいということであり、特定の日付が何番目の曜日であるかを知りたいということです (例: 2013 年 7 月 1 日)。月曜日 = 1、火曜日 = 2 というように、日曜日 = 7 まで続きます。

    LocalDate ld = LocalDate.of(2013, Month.JULY, 1);
    
    // Monday is first day of week; which number day of the week is ld then?
    int numberDayOfTheWeek = ld.get(WeekFields.ISO.dayOfWeek()); // 1 through 7
    System.out.println(numberDayOfTheWeek);

出力は次のとおりです。

1

月曜日を週の最初の曜日にすることは、日付と時刻の国際標準である ISO 8601 に準拠しています。したがって、ビルトインWeekFields.ISOはこの番号付けを使用します。WeekFields.ISO.dayOfWeek()は、オブジェクトの曜日についてTemporalFieldクエリを実行するために使用する を提供します。LocalDate

代わりに、月曜日が週の最初の日であることを指定するためにWeekFields.ISO使用できます。WeekFields.of(DayOfWeek.MONDAY, 1)の 2 番目の引数of()は、(年または月の) 最初の週の最小日数を 1 から 7 の形式で表したものですが、ここでは使用しません。したがって、どの数値を使用しても問題ありません。

リンク

于 2021-08-14T18:27:22.010 に答える