web-dev-qa-db-ja.com

Javaで1年の合計週を見つける方法は?

私はプロジェクトに取り組んでいます。そこで、私は1年の合計週を見つける必要があります。次のコードを試してみましたが、間違った答えが返ってきました。2020年は53週間ですが、このコードでは52週間になります。

このコードのどこが間違っていますか?

package com.hib.mapping;

import Java.time.LocalDate;
import Java.time.temporal.WeekFields;
import Java.util.Calendar;
import Java.util.GregorianCalendar;

import org.joda.time.DateTime;

public class TestWeek {

    public static void main(String args[]) {
        System.out.println(getWeeks());
    }

    public static int getWeeks() {

        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, 2020);
        cal.set(Calendar.MONTH, Calendar.JANUARY);
        cal.set(Calendar.DAY_OF_MONTH, 1);
        GregorianCalendar gregorianCalendar = new GregorianCalendar();

        int weekDay = cal.get(Calendar.DAY_OF_WEEK) - 1;
        if (gregorianCalendar.isLeapYear(2020)) {
            if (weekDay == Calendar.THURSDAY || weekDay == Calendar.WEDNESDAY)
                return 53;
            else
                return 52;
        } else {
            if (weekDay == Calendar.THURSDAY)
                return 53;
            else
                return 52;
        }

    }

}

出力:

52

11

これもうまくいくと思います:

int year = 2020;
long numOfWeeks = LocalDate.of(year, 1, 1).datesUntil(LocalDate.of(year, 12, 31), Period.ofDays(7)).count();
System.out.println("Weeks: " + numOfWeeks);
1
Tim Hunter

Java= 8.でたくさん試した後、私は解決策を見つけることができませんでした。それから、Jodaの日付と時刻の依存関係を準備しました。それは期待どおりに私に良い答えを与えました

コード:

for (int i = 2020; i < 2100; i++) {
  int weeks = new DateTime().withYear(i).weekOfWeekyear().getMaximumValue();
  System.out.println(i + " years : " + weeks); 
}

Mavenの依存関係:

<dependency>
    <groupId>joda-time</groupId>
    <artifactId>joda-time</artifactId>
    <version>2.10.5</version>
</dependency>
0