java - 如何在Java中查找一年的总周数?

标签 java date java-8 week-number

我正在做一个项目。我应该在那里找到一年的总周数。我尝试使用以下代码,但得到的答案是错误的: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

最佳答案

使用Wikipedia定义here。如果1月1日是星期四,或12月31日是星期四,则一年有53周,否则有52周。此定义等同于您使用的定义。我认为这是一种更容易检查的条件,因为您不需要检查leap年。

使用Java 8 java.time API:

int year = 2020;
boolean is53weekYear = LocalDate.of(year, 1, 1).getDayOfWeek() == DayOfWeek.THURSDAY ||
        LocalDate.of(year, 12, 31).getDayOfWeek() == DayOfWeek.THURSDAY;
int weekCount = is53weekYear ? 53 : 52;

关于java - 如何在Java中查找一年的总周数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59935857/

相关文章:

java - GWT 客户端中哪个是好的 Java 或 Json?

java - ND4J在GPU上运行缓慢,但在CPU上运行速度很快

sql-server - Excel 错误地将 Date 转换为 Int

sql - 给定周数,在 T-SQL 中返回一周的第一天

java - Java 8接口(interface)方法中不允许 “synchronized”是什么原因?

java - 为什么我不能使用已实现接口(interface)的静态方法?

java - Java Spark如何将JavaPairRDD <HashSet <String>,HashMap <String,Double >>保存到文件?

javascript - 使用 momentjs 获取以毫秒为单位的时间跨度

generics - 通过函数列表构建链式比较器

javascript - 如何在 java 中解码 json 数据(如何从本地主机获取 json 数据并打印其值)