web-dev-qa-db-fra.com

Comment trouver le nombre total de semaines d'une année en Java?

Je travaille sur un projet. Là, je devrais trouver le total des semaines d'une année. J'ai essayé avec le code suivant, mais je me trompe de réponse: 2020 a 53 semaines, mais ce code donne 52 semaines.

Où me suis-je trompé dans ce code?

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;
        }

    }

}

Production:

52

11
Kumaresan Perumal

Je pense que cela devrait aussi bien fonctionner:

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

Après avoir beaucoup essayé dans Java 8. Je n'ai pas pu trouver de solution. Ensuite, j'ai préparé la dépendance de date et d'heure Joda. Cela m'a donné une bonne réponse comme je m'y attendais.

code:

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

Dépendance Maven:

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