java - 如何在 Java 中找到一年中的总周数?
问题描述
我正在做一个项目。在那里我应该找到一年中的总周数。我尝试使用以下代码,但得到错误答案: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 定义。如果 1 月 1 日是星期四,一年有 53 周,或者 12 月 31 日是星期四,否则有 52 周。此定义等同于您使用的定义。我认为这是一种更容易检查的条件,因为您不需要检查闰年。
使用 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;
推荐阅读
- selenium - 从 Web 浏览器访问应用程序保存的数据
- c# - hive jdbc 驱动程序:javax.xml.stream.XMLStreamException:尝试输出第二个根,
- load-balancing - 如何在 HAProxy 中使用 external-check 命令
- clojure - 使用 map 时收集顺序颠倒,但使用 mapv 很好
- php - Laravel 5.4:返回响应 json groupBy created_at
- node.js - npm npm run watch-poll 宅基地错误
- glsl - 计算着色器和工作组
- amazon-web-services - 如何使用 lambda 和 SQS 实现优先级队列架构?
- excel-formula - 有没有办法从连接结果中删除空换行符?
- spring - Websphere - Spring 集成 SSL 问题